/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DescribeCkafkaVersion response structure.
 * @class
 */
class DescribeCkafkaVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Topic details
 * @class
 */
class TopicDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic Id.
         * @type {string || null}
         */
        this.TopicId = null;

        /**
         * Number of partitions
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * Number of topic replicas. valid values: 1, 3.
         * @type {number || null}
         */
        this.ReplicaNum = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Creation time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Whether to enable IP authentication allowlist. true: yes, false: no
         * @type {boolean || null}
         */
        this.EnableWhiteList = null;

        /**
         * Number of IPs in IP allowlist
         * @type {number || null}
         */
        this.IpWhiteListCount = null;

        /**
         * Data backup cos bucket. specifies the bucket address for archiving to cos.
         * @type {string || null}
         */
        this.ForwardCosBucket = null;

        /**
         * Status of data backup to COS. 1: not enabled, 0: enabled
         * @type {number || null}
         */
        this.ForwardStatus = null;

        /**
         * Frequency of data backup to COS
         * @type {number || null}
         */
        this.ForwardInterval = null;

        /**
         * Advanced configuration.
         * @type {Config || null}
         */
        this.Config = null;

        /**
         * Message retention period configuration (used for dynamic configuration change records).
         * @type {TopicRetentionTimeConfigRsp || null}
         */
        this.RetentionTimeConfig = null;

        /**
         * 0: normal. 1: deleted. 2: deleting.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Tag list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.TopicId = 'TopicId' in params ? params.TopicId : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.ReplicaNum = 'ReplicaNum' in params ? params.ReplicaNum : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.EnableWhiteList = 'EnableWhiteList' in params ? params.EnableWhiteList : null;
        this.IpWhiteListCount = 'IpWhiteListCount' in params ? params.IpWhiteListCount : null;
        this.ForwardCosBucket = 'ForwardCosBucket' in params ? params.ForwardCosBucket : null;
        this.ForwardStatus = 'ForwardStatus' in params ? params.ForwardStatus : null;
        this.ForwardInterval = 'ForwardInterval' in params ? params.ForwardInterval : null;

        if (params.Config) {
            let obj = new Config();
            obj.deserialize(params.Config)
            this.Config = obj;
        }

        if (params.RetentionTimeConfig) {
            let obj = new TopicRetentionTimeConfigRsp();
            obj.deserialize(params.RetentionTimeConfig)
            this.RetentionTimeConfig = obj;
        }
        this.Status = 'Status' in params ? params.Status : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * DeleteAcl request structure.
 * @class
 */
class DeleteAclRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL resource type (`2`: TOPIC, `3`: GROUP, `4`: CLUSTER).
         * @type {number || null}
         */
        this.ResourceType = null;

        /**
         * Resource name, which is related to `resourceType`. For example, if `resourceType` is `TOPIC`, this field indicates the topic name; if `resourceType` is `GROUP`, this field indicates the group name; if `resourceType` is `CLUSTER`, this field can be left empty.
         * @type {string || null}
         */
        this.ResourceName = null;

        /**
         * ACL operation type (`2`: ALL, `3`: READ, `4`: WRITE, `5`: CREATE, `6`: DELETE, `7`: ALTER, `8`: DESCRIBE, `9`: CLUSTER_ACTION, `10`: DESCRIBE_CONFIGS, `11`: ALTER_CONFIGS, `12`: IDEMPOTENT_WRITE).
         * @type {number || null}
         */
        this.Operation = null;

        /**
         * Permission type (2:DENY, 3:ALLOW). currently ckafka supports ALLOW (equivalent to allowlist), others used when compatible with open-source kafka acl.
         * @type {number || null}
         */
        this.PermissionType = null;

        /**
         * The default value is `*`, which means that any host can access. Currently, CKafka does not support the host as `*`, but the future product based on the open-source Kafka will directly support this
         * @type {string || null}
         */
        this.Host = null;

        /**
         * List of users, defaults to User:*, means any User is accessible in the entire region. the current User can only be the User in the list of users.
         * @type {string || null}
         */
        this.Principal = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceName = 'ResourceName' in params ? params.ResourceName : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.PermissionType = 'PermissionType' in params ? params.PermissionType : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.Principal = 'Principal' in params ? params.Principal : null;

    }
}

/**
 * Consumer information
 * @class
 */
class GroupInfoMember extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID generated for consumer in consumer group by coordinator
         * @type {string || null}
         */
        this.MemberId = null;

        /**
         * `client.id` information by the client consumer SDK
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * Generally stores client IP address
         * @type {string || null}
         */
        this.ClientHost = null;

        /**
         * Stores the information of partition assigned to this consumer
         * @type {Assignment || null}
         */
        this.Assignment = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MemberId = 'MemberId' in params ? params.MemberId : null;
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.ClientHost = 'ClientHost' in params ? params.ClientHost : null;

        if (params.Assignment) {
            let obj = new Assignment();
            obj.deserialize(params.Assignment)
            this.Assignment = obj;
        }

    }
}

/**
 * Four pieces of information of ACL rules: source IP address, destination IP address, source port, and destination port
 * @class
 */
class AclRuleInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * ACL operation types. Enumerated values: `All` (all operations), `Read` (read), `Write` (write).
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Permission type. Deny: Deny. Allow: permission.
         * @type {string || null}
         */
        this.PermissionType = null;

        /**
         * Indicates any host is accessible in the entire region.
         * @type {string || null}
         */
        this.Host = null;

        /**
         * The User. User:* means any User is accessible in the entire region. the current User can only be the User in the list of users. the input format requires the [User:] prefix. for example, for User A, input User:A.
         * @type {string || null}
         */
        this.Principal = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.PermissionType = 'PermissionType' in params ? params.PermissionType : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.Principal = 'Principal' in params ? params.Principal : null;

    }
}

/**
 * BatchCreateAcl request structure.
 * @class
 */
class BatchCreateAclRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL resource type. Default value: `2` (topic).
         * @type {number || null}
         */
        this.ResourceType = null;

        /**
         * Resource list array, obtainable through the DescribeTopic API (https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1).
         * @type {Array.<string> || null}
         */
        this.ResourceNames = null;

        /**
         * Specifies the set ACL rule list, which can be obtained through the DescribeAclRule API (https://www.tencentcloud.comom/document/product/597/89217?from_cn_redirect=1).
         * @type {Array.<AclRuleInfo> || null}
         */
        this.RuleList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceNames = 'ResourceNames' in params ? params.ResourceNames : null;

        if (params.RuleList) {
            this.RuleList = new Array();
            for (let z in params.RuleList) {
                let obj = new AclRuleInfo();
                obj.deserialize(params.RuleList[z]);
                this.RuleList.push(obj);
            }
        }

    }
}

/**
 * DeleteUser request structure.
 * @class
 */
class DeleteUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username, which can be obtained through the [DescribeUser](https://www.tencentcloud.comom/document/product/597/40855?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * Partition and offset
 * @class
 */
class PartitionOffset extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition
         * @type {string || null}
         */
        this.Partition = null;

        /**
         * Specifies the offset.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeACL request structure.
 * @class
 */
class DescribeACLRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL resource type (`2`: TOPIC, `3`: GROUP, `4`: CLUSTER).
         * @type {number || null}
         */
        this.ResourceType = null;

        /**
         * Resource name, which is related to `resourceType`. For example, if `resourceType` is `TOPIC`, this field indicates the topic name; if `resourceType` is `GROUP`, this field indicates the group name; if `resourceType` is `CLUSTER`, this field can be left empty.
         * @type {string || null}
         */
        this.ResourceName = null;

        /**
         * Offset position
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number limit. default value is 50. maximum value is 50.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Keyword match
         * @type {string || null}
         */
        this.SearchWord = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceName = 'ResourceName' in params ? params.ResourceName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;

    }
}

/**
 * Deletion of instances returns a task.
 * @class
 */
class InstanceDeleteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the task Id returned after deleting an instance.
         * @type {number || null}
         */
        this.FlowId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;

    }
}

/**
 * Results of the batch modified topic attributes
 * @class
 */
class BatchModifyTopicResultDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Operation return code.
         * @type {string || null}
         */
        this.ReturnCode = null;

        /**
         * Returned information.
         * @type {string || null}
         */
        this.Message = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.ReturnCode = 'ReturnCode' in params ? params.ReturnCode : null;
        this.Message = 'Message' in params ? params.Message : null;

    }
}

/**
 * DescribeTopicAttributes request structure.
 * @class
 */
class DescribeTopicAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic name, which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * DescribeInstanceAttributes request structure.
 * @class
 */
class DescribeInstanceAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * User group entity
 * @class
 */
class ConsumerGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * User group name
         * @type {string || null}
         */
        this.ConsumerGroupName = null;

        /**
         * Subscribed message entity
         * @type {Array.<SubscribedInfo> || null}
         */
        this.SubscribedInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConsumerGroupName = 'ConsumerGroupName' in params ? params.ConsumerGroupName : null;

        if (params.SubscribedInfo) {
            this.SubscribedInfo = new Array();
            for (let z in params.SubscribedInfo) {
                let obj = new SubscribedInfo();
                obj.deserialize(params.SubscribedInfo[z]);
                this.SubscribedInfo.push(obj);
            }
        }

    }
}

/**
 * Stores the information of partition assigned to this consumer
 * @class
 */
class Assignment extends  AbstractModel {
    constructor(){
        super();

        /**
         * Assignment version information
         * @type {number || null}
         */
        this.Version = null;

        /**
         * topic information list.
         * @type {Array.<GroupInfoTopics> || null}
         */
        this.Topics = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Version = 'Version' in params ? params.Version : null;

        if (params.Topics) {
            this.Topics = new Array();
            for (let z in params.Topics) {
                let obj = new GroupInfoTopics();
                obj.deserialize(params.Topics[z]);
                this.Topics.push(obj);
            }
        }

    }
}

/**
 * ModifyAclRule request structure.
 * @class
 */
class ModifyAclRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL rule name.
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * Specifies whether to apply to newly-added topics when importing predefined rule modifications.
         * @type {number || null}
         */
        this.IsApplied = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.IsApplied = 'IsApplied' in params ? params.IsApplied : null;

    }
}

/**
 * DescribeAclRule response structure.
 * @class
 */
class DescribeAclRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The set of returned ACL rules
         * @type {AclRuleResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new AclRuleResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerGroup response structure.
 * @class
 */
class DescribeConsumerGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned consumer group information
         * @type {ConsumerGroupResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new ConsumerGroupResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Prices of different purchased items
 * @class
 */
class InquiryDetailPrice extends  AbstractModel {
    constructor(){
        super();

        /**
         * Price of additional private network bandwidth
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InquiryBasePrice || null}
         */
        this.BandwidthPrice = null;

        /**
         * Disk price
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InquiryBasePrice || null}
         */
        this.DiskPrice = null;

        /**
         * Price of additional partitions
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InquiryBasePrice || null}
         */
        this.PartitionPrice = null;

        /**
         * Price of additional topics
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InquiryBasePrice || null}
         */
        this.TopicPrice = null;

        /**
         * Instance package price.
         * @type {InquiryBasePrice || null}
         */
        this.InstanceTypePrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.BandwidthPrice) {
            let obj = new InquiryBasePrice();
            obj.deserialize(params.BandwidthPrice)
            this.BandwidthPrice = obj;
        }

        if (params.DiskPrice) {
            let obj = new InquiryBasePrice();
            obj.deserialize(params.DiskPrice)
            this.DiskPrice = obj;
        }

        if (params.PartitionPrice) {
            let obj = new InquiryBasePrice();
            obj.deserialize(params.PartitionPrice)
            this.PartitionPrice = obj;
        }

        if (params.TopicPrice) {
            let obj = new InquiryBasePrice();
            obj.deserialize(params.TopicPrice)
            this.TopicPrice = obj;
        }

        if (params.InstanceTypePrice) {
            let obj = new InquiryBasePrice();
            obj.deserialize(params.InstanceTypePrice)
            this.InstanceTypePrice = obj;
        }

    }
}

/**
 * FetchMessageListByOffset response structure.
 * @class
 */
class FetchMessageListByOffsetResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result. Note: The returned list does not display the message content (key and value). To query the message content, call the `FetchMessageByOffset` API.
         * @type {Array.<ConsumerRecord> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new ConsumerRecord();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Values returned by the `InquireCkafkaPrice` API
 * @class
 */
class InquireCkafkaPriceResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the instance price.
         * @type {InquiryPrice || null}
         */
        this.InstancePrice = null;

        /**
         * Public network bandwidth price
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InquiryPrice || null}
         */
        this.PublicNetworkBandwidthPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstancePrice) {
            let obj = new InquiryPrice();
            obj.deserialize(params.InstancePrice)
            this.InstancePrice = obj;
        }

        if (params.PublicNetworkBandwidthPrice) {
            let obj = new InquiryPrice();
            obj.deserialize(params.PublicNetworkBandwidthPrice)
            this.PublicNetworkBandwidthPrice = obj;
        }

    }
}

/**
 * CreateRoute request structure.
 * @class
 */
class CreateRouteRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * <p>Specifies the ckafka cluster instance id. obtain through the API <a href="https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1">DescribeInstances</a>.</p>.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * <P>Specifies the network type of the route (3: vpc routing; 7: internal support route; 1: public network route).</p>.
         * @type {number || null}
         */
        this.VipType = null;

        /**
         * <p>vpc network Id. required when vipType is 3.</p>.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * <p>Specifies the vpc subnet id. required when vipType is 3.</p>.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * <p>Access type: 0-plaintext; 1-sasl_plaintext; 3-sasl_ssl; 4-sasl_scram_sha_256; 5-sasl_scram_sha_512. defaults to 0. when vipType=3, supports 0,1,3,4,5. when vipType=7, supports 0,1,3. when vipType=1, supports 1,3.</p>.
         * @type {number || null}
         */
        this.AccessType = null;

        /**
         * <P>Specifies whether access management is required. this field has been deprecated.</p>.
         * @type {number || null}
         */
        this.AuthFlag = null;

        /**
         * <p>Specifies the caller appId.</p>.
         * @type {number || null}
         */
        this.CallerAppid = null;

        /**
         * <P>Public network bandwidth. required for public network route. must be a multiple of 3. no default value.</p>.
         * @type {number || null}
         */
        this.PublicNetwork = null;

        /**
         * <p>vip address.</p>.
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * <P>Specifies the remark information.</p>.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * <P>Specifies the ordered list of security group associations.</p>.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VipType = 'VipType' in params ? params.VipType : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.AccessType = 'AccessType' in params ? params.AccessType : null;
        this.AuthFlag = 'AuthFlag' in params ? params.AuthFlag : null;
        this.CallerAppid = 'CallerAppid' in params ? params.CallerAppid : null;
        this.PublicNetwork = 'PublicNetwork' in params ? params.PublicNetwork : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * DeleteTopic request structure.
 * @class
 */
class DeleteTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CKafka instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * CKafka topic name
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * DescribeInstances response structure.
 * @class
 */
class DescribeInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {InstanceResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new InstanceResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * FetchMessageByOffset response structure.
 * @class
 */
class FetchMessageByOffsetResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results
         * @type {ConsumerRecord || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new ConsumerRecord();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * BatchModifyTopicAttributes response structure.
 * @class
 */
class BatchModifyTopicAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {Array.<BatchModifyTopicResultDTO> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new BatchModifyTopicResultDTO();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Data structure returned by monthly subscribed instance APIs
 * @class
 */
class CreateInstancePreResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned code. 0: Normal; other values: Error.
         * @type {string || null}
         */
        this.ReturnCode = null;

        /**
         * The message indicating whether the operation is successful.
         * @type {string || null}
         */
        this.ReturnMessage = null;

        /**
         * Specifies the Data returned by the operation.
         * @type {CreateInstancePreData || null}
         */
        this.Data = null;

        /**
         * Deletion time.  This parameter has been deprecated and will be deleted.  Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DeleteRouteTimestamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReturnCode = 'ReturnCode' in params ? params.ReturnCode : null;
        this.ReturnMessage = 'ReturnMessage' in params ? params.ReturnMessage : null;

        if (params.Data) {
            let obj = new CreateInstancePreData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.DeleteRouteTimestamp = 'DeleteRouteTimestamp' in params ? params.DeleteRouteTimestamp : null;

    }
}

/**
 * Internal topic object of `GroupInfo`
 * @class
 */
class GroupInfoTopics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name of assigned topics
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Allocates partition info.
         * @type {Array.<number> || null}
         */
        this.Partitions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.Partitions = 'Partitions' in params ? params.Partitions : null;

    }
}

/**
 * InstanceScalingDown request structure.
 * @class
 */
class InstanceScalingDownRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Shrink mode. 1: stable mode. 
2. specifies high-speed configuration change.
         * @type {number || null}
         */
        this.UpgradeStrategy = null;

        /**
         * Specifies the disk capacity in GB. value range: maximum value 500000, step length 100.
The specifications and limitations can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122562.?from_cn_redirect=1


         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Peak bandwidth in MB/s.
Specifies the url (https://www.tencentcloud.comom/document/product/597/11745?from_cn_redirect=1) to view specification limits and corresponding step length.
         * @type {number || null}
         */
        this.BandWidth = null;

        /**
         * Partition upper limit maximum value of 40000, step length 100.
Specification limits can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122563.?from_cn_redirect=1

         * @type {number || null}
         */
        this.Partition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UpgradeStrategy = 'UpgradeStrategy' in params ? params.UpgradeStrategy : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.BandWidth = 'BandWidth' in params ? params.BandWidth : null;
        this.Partition = 'Partition' in params ? params.Partition : null;

    }
}

/**
 * FetchMessageListByOffset request structure.
 * @class
 */
class FetchMessageListByOffsetRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Partition ID
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Offset information
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The maximum number of messages that can be queried. Default value: 20. Maximum value: 20.
         * @type {number || null}
         */
        this.SinglePartitionRecordNumber = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.SinglePartitionRecordNumber = 'SinglePartitionRecordNumber' in params ? params.SinglePartitionRecordNumber : null;

    }
}

/**
 * DescribeSecurityGroupRoutes response structure.
 * @class
 */
class DescribeSecurityGroupRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returns the security group routing information result object.
         * @type {SecurityGroupRouteResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new SecurityGroupRouteResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpgradeBrokerVersion request structure.
 * @class
 */
class UpgradeBrokerVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * 1. smooth configuration upgrade 2. vertical configuration upgrade.
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Version number
         * @type {string || null}
         */
        this.SourceVersion = null;

        /**
         * Version number
         * @type {string || null}
         */
        this.TargetVersion = null;

        /**
         * Delay time.
         * @type {string || null}
         */
        this.DelayTimeStamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.SourceVersion = 'SourceVersion' in params ? params.SourceVersion : null;
        this.TargetVersion = 'TargetVersion' in params ? params.TargetVersion : null;
        this.DelayTimeStamp = 'DelayTimeStamp' in params ? params.DelayTimeStamp : null;

    }
}

/**
 * ModifyInstancePre request structure.
 * @class
 */
class ModifyInstancePreRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the disk capacity in GB. value range: 100 to 500000 with a step length of 100.
Specification limits can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122562.?from_cn_redirect=1

         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Peak bandwidth in MB/s.
Specifies the specification limits and corresponding step length through the following link: https://www.tencentcloud.comom/document/product/597/11745.?from_cn_redirect=1

         * @type {number || null}
         */
        this.BandWidth = null;

        /**
         * Partition upper bound. maximum value of 40000. step length of 100.
Specifies the specifications and limits that can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122563.?from_cn_redirect=1
         * @type {number || null}
         */
        this.Partition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.BandWidth = 'BandWidth' in params ? params.BandWidth : null;
        this.Partition = 'Partition' in params ? params.Partition : null;

    }
}

/**
 * CreateAclRule request structure.
 * @class
 */
class CreateAclRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL resource type. Currently, the only valid value is `Topic`.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * ACL rule-based matching type. currently supports prefix match and PRESET policy. valid values: PREFIXED/PRESET.
         * @type {string || null}
         */
        this.PatternType = null;

        /**
         * Rule name
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * ACL rule list
         * @type {Array.<AclRuleInfo> || null}
         */
        this.RuleList = null;

        /**
         * Indicates the prefix for prefix match. this parameter is required when PatternType value is PREFIXED.
         * @type {string || null}
         */
        this.Pattern = null;

        /**
         * Specifies whether to apply the preset ACL rule to newly-added topics. defaults to 0, which means no. a value of 1 means yes.
         * @type {number || null}
         */
        this.IsApplied = null;

        /**
         * Remarks for ACL rules
         * @type {string || null}
         */
        this.Comment = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.PatternType = 'PatternType' in params ? params.PatternType : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;

        if (params.RuleList) {
            this.RuleList = new Array();
            for (let z in params.RuleList) {
                let obj = new AclRuleInfo();
                obj.deserialize(params.RuleList[z]);
                this.RuleList.push(obj);
            }
        }
        this.Pattern = 'Pattern' in params ? params.Pattern : null;
        this.IsApplied = 'IsApplied' in params ? params.IsApplied : null;
        this.Comment = 'Comment' in params ? params.Comment : null;

    }
}

/**
 * Routing list filter.
 * @class
 */
class RouteFilter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filters by name. currently supports security-group-id. filters by security group association.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filter value. when the filter name is security-group-id, only supports transmission of one value.
         * @type {Array.<string> || null}
         */
        this.Values = null;

        /**
         * Filter relationship. supports IN and NOT_IN. default is IN.
         * @type {string || null}
         */
        this.Relation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;
        this.Relation = 'Relation' in params ? params.Relation : null;

    }
}

/**
 * DescribeInstancesDetail response structure.
 * @class
 */
class DescribeInstancesDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result object of instance details
         * @type {InstanceDetailResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new InstanceDetailResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Data returned by the `CreateInstancePre` API.
 * @class
 */
class CreateInstancePreData extends  AbstractModel {
    constructor(){
        super();

        /**
         * CreateInstancePre returns fixed as 0. it cannot be used as a query condition for CheckTaskStatus. this is merely to ensure alignment with the backend data structure.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Order ID list
         * @type {Array.<string> || null}
         */
        this.DealNames = null;

        /**
         * The ckafka cluster instance Id. by default, returns the Id of the first purchased instance when purchasing multiple instances.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Order and purchase mapping list corresponding to the instance.
         * @type {Array.<DealInstanceDTO> || null}
         */
        this.DealNameInstanceIdMapping = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.DealNames = 'DealNames' in params ? params.DealNames : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.DealNameInstanceIdMapping) {
            this.DealNameInstanceIdMapping = new Array();
            for (let z in params.DealNameInstanceIdMapping) {
                let obj = new DealInstanceDTO();
                obj.deserialize(params.DealNameInstanceIdMapping[z]);
                this.DealNameInstanceIdMapping.push(obj);
            }
        }

    }
}

/**
 * Output parameters of ACL rule list APIs
 * @class
 */
class AclRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * ACL rule name.
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL rule-based matching type. currently only supports prefix match. valid values: PREFIXED.
         * @type {string || null}
         */
        this.PatternType = null;

        /**
         * Indicates the prefix value for prefix match.
         * @type {string || null}
         */
        this.Pattern = null;

        /**
         * Acl resource type, currently only support Topic. valid values: Topic.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Specifies the ACL information contained in the rule.
         * @type {string || null}
         */
        this.AclList = null;

        /**
         * Specifies the time when the rule was created.
         * @type {string || null}
         */
        this.CreateTimeStamp = null;

        /**
         * Specifies whether to apply the preset ACL rule to newly-added topics.
         * @type {number || null}
         */
        this.IsApplied = null;

        /**
         * Rule update time.
         * @type {string || null}
         */
        this.UpdateTimeStamp = null;

        /**
         * Specifies the remark of the rule.
         * @type {string || null}
         */
        this.Comment = null;

        /**
         * One of the displayed corresponding TopicName.
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Number of topics to which the ACL rule is applied.
         * @type {number || null}
         */
        this.TopicCount = null;

        /**
         * Specifies the pattern type.
         * @type {string || null}
         */
        this.PatternTypeTitle = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PatternType = 'PatternType' in params ? params.PatternType : null;
        this.Pattern = 'Pattern' in params ? params.Pattern : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.AclList = 'AclList' in params ? params.AclList : null;
        this.CreateTimeStamp = 'CreateTimeStamp' in params ? params.CreateTimeStamp : null;
        this.IsApplied = 'IsApplied' in params ? params.IsApplied : null;
        this.UpdateTimeStamp = 'UpdateTimeStamp' in params ? params.UpdateTimeStamp : null;
        this.Comment = 'Comment' in params ? params.Comment : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.TopicCount = 'TopicCount' in params ? params.TopicCount : null;
        this.PatternTypeTitle = 'PatternTypeTitle' in params ? params.PatternTypeTitle : null;

    }
}

/**
 * DescribeAclRule request structure.
 * @class
 */
class DescribeAclRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL rule name
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * ACL rule-based matching type (PREFIXED: prefix match, PRESET: PRESET policy).
         * @type {string || null}
         */
        this.PatternType = null;

        /**
         * Specifies whether to read the simplified ACL rule. default value is false, which means not to read the simplified ACL rule.
         * @type {boolean || null}
         */
        this.IsSimplified = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.PatternType = 'PatternType' in params ? params.PatternType : null;
        this.IsSimplified = 'IsSimplified' in params ? params.IsSimplified : null;

    }
}

/**
 * Instance route.
 * @class
 */
class InstanceRoute extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Route ID
         * @type {number || null}
         */
        this.RouteId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RouteId = 'RouteId' in params ? params.RouteId : null;

    }
}

/**
 * DescribeACL response structure.
 * @class
 */
class DescribeACLResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned ACL result set object
         * @type {AclResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new AclResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Dynamic disk expansion configuration
 * @class
 */
class DynamicDiskConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable dynamic disk expansion configuration. `0`: disable, `1`: enable.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Enable = null;

        /**
         * Percentage of dynamic disk expansion each time.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StepForwardPercentage = null;

        /**
         * Disk quota threshold (in percentage) for triggering the automatic disk expansion event.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskQuotaPercentage = null;

        /**
         * Max disk space in GB.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxDiskSpace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.StepForwardPercentage = 'StepForwardPercentage' in params ? params.StepForwardPercentage : null;
        this.DiskQuotaPercentage = 'DiskQuotaPercentage' in params ? params.DiskQuotaPercentage : null;
        this.MaxDiskSpace = 'MaxDiskSpace' in params ? params.MaxDiskSpace : null;

    }
}

/**
 * Returned result value of operation
 * @class
 */
class JgwOperateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned code. 0: normal, other values: error
         * @type {string || null}
         */
        this.ReturnCode = null;

        /**
         * Success message
         * @type {string || null}
         */
        this.ReturnMessage = null;

        /**
         * Data returned by an operation, which may contain `flowId`, etc.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {OperateResponseData || null}
         */
        this.Data = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReturnCode = 'ReturnCode' in params ? params.ReturnCode : null;
        this.ReturnMessage = 'ReturnMessage' in params ? params.ReturnMessage : null;

        if (params.Data) {
            let obj = new OperateResponseData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }

    }
}

/**
 * InquireCkafkaPrice request structure.
 * @class
 */
class InquireCkafkaPriceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Chinese site standard version fill in standards2 international site standard version fill in standard pro edition fill in profession advanced edition fill in premium.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Billing mode for instance purchase/renewal. If this parameter is left empty when you purchase an instance, the fees for one month under the monthly subscription mode will be displayed by default.
         * @type {InstanceChargeParam || null}
         */
        this.InstanceChargeParam = null;

        /**
         * The number of instances to be purchased or renewed. If this parameter is left empty, the default value is `1`.
         * @type {number || null}
         */
        this.InstanceNum = null;

        /**
         * Specifies the internal network bandwidth size of the instance, in MB/s (required when purchased; bandwidth information is required for pro edition/advanced edition inquiries).
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Specifies the purchase type and size of the hard disk of the instance. required when purchased. disk information is required for pro edition or advanced edition inquiries.

         * @type {InquiryDiskParam || null}
         */
        this.InquiryDiskParam = null;

        /**
         * Message retention period in hours, which is required when you purchase an instance.
         * @type {number || null}
         */
        this.MessageRetention = null;

        /**
         * The number of instance topics to be purchased, which is required when you purchase an instance.
         * @type {number || null}
         */
        this.Topic = null;

        /**
         * Number of partitions for instance purchase, unit: unit (required when purchased; bandwidth information required for pro edition/advanced edition inquiry).
Partition upper limit. maximum value of 40000. step length of 100.
Specifies the specifications and limits that can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122563.?from_cn_redirect=1

         * @type {number || null}
         */
        this.Partition = null;

        /**
         * The region for instance purchase, which can be obtained via the `DescribeCkafkaZone` API.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * Operation type flag. `purchase`: Making new purchases; `renew`: Renewing an instance. The default value is `purchase` if this parameter is left empty.
         * @type {string || null}
         */
        this.CategoryAction = null;

        /**
         * This field is not required.
         * @type {string || null}
         */
        this.BillType = null;

        /**
         * Public network bandwidth billing mode. currently only the pro edition supports public network bandwidth. required when purchasing public network bandwidth. value must be a multiple of 3.
         * @type {InquiryPublicNetworkParam || null}
         */
        this.PublicNetworkParam = null;

        /**
         * ID of the instance to be renewed, which is required when you renew an instance.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

        if (params.InstanceChargeParam) {
            let obj = new InstanceChargeParam();
            obj.deserialize(params.InstanceChargeParam)
            this.InstanceChargeParam = obj;
        }
        this.InstanceNum = 'InstanceNum' in params ? params.InstanceNum : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;

        if (params.InquiryDiskParam) {
            let obj = new InquiryDiskParam();
            obj.deserialize(params.InquiryDiskParam)
            this.InquiryDiskParam = obj;
        }
        this.MessageRetention = 'MessageRetention' in params ? params.MessageRetention : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.CategoryAction = 'CategoryAction' in params ? params.CategoryAction : null;
        this.BillType = 'BillType' in params ? params.BillType : null;

        if (params.PublicNetworkParam) {
            let obj = new InquiryPublicNetworkParam();
            obj.deserialize(params.PublicNetworkParam)
            this.PublicNetworkParam = obj;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Zone information entity
 * @class
 */
class ZoneInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone
         * @type {string || null}
         */
        this.ZoneId = null;

        /**
         * Whether it is an internal application.
         * @type {number || null}
         */
        this.IsInternalApp = null;

        /**
         * Application identifier
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Indicates whether the AZ is sold out. true indicates sold out. false indicates not sold out.
         * @type {boolean || null}
         */
        this.Flag = null;

        /**
         * Availability zone name.
         * @type {string || null}
         */
        this.ZoneName = null;

        /**
         * Availability zone status. enumerates example: 3: enable, 4: disable. availability zone status is subject to SoldOut.
         * @type {number || null}
         */
        this.ZoneStatus = null;

        /**
         * Extra flag
         * @type {string || null}
         */
        this.Exflag = null;

        /**
         * Specifies whether the item is sold-out. valid values: true (sold-out), false (not sold out).
         * @type {string || null}
         */
        this.SoldOut = null;

        /**
         * Specifies the sell-out information of the standard version.
         * @type {Array.<SaleInfo> || null}
         */
        this.SalesInfo = null;

        /**
         * Additional flag.
         * @type {string || null}
         */
        this.ExtraFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.IsInternalApp = 'IsInternalApp' in params ? params.IsInternalApp : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Flag = 'Flag' in params ? params.Flag : null;
        this.ZoneName = 'ZoneName' in params ? params.ZoneName : null;
        this.ZoneStatus = 'ZoneStatus' in params ? params.ZoneStatus : null;
        this.Exflag = 'Exflag' in params ? params.Exflag : null;
        this.SoldOut = 'SoldOut' in params ? params.SoldOut : null;

        if (params.SalesInfo) {
            this.SalesInfo = new Array();
            for (let z in params.SalesInfo) {
                let obj = new SaleInfo();
                obj.deserialize(params.SalesInfo[z]);
                this.SalesInfo.push(obj);
            }
        }
        this.ExtraFlag = 'ExtraFlag' in params ? params.ExtraFlag : null;

    }
}

/**
 * DescribeTopicSubscribeGroup response structure.
 * @class
 */
class DescribeTopicSubscribeGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results
         * @type {TopicSubscribeGroup || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new TopicSubscribeGroup();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCkafkaZone request structure.
 * @class
 */
class DescribeCkafkaZoneRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * cdc cluster Id.
         * @type {string || null}
         */
        this.CdcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CdcId = 'CdcId' in params ? params.CdcId : null;

    }
}

/**
 * Sales information of versions.
 * @class
 */
class SaleInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The manually configured flag. valid values: true (sold-out), false (available).
         * @type {boolean || null}
         */
        this.Flag = null;

        /**
         * Specifies the ckafka version number (1.1.1/2.4.2/0.10.2).
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Pro edition, standard version flag.
         * @type {string || null}
         */
        this.Platform = null;

        /**
         * Specifies whether the item is sold-out. valid values: true (sold-out).
         * @type {boolean || null}
         */
        this.SoldOut = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Flag = 'Flag' in params ? params.Flag : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.Platform = 'Platform' in params ? params.Platform : null;
        this.SoldOut = 'SoldOut' in params ? params.SoldOut : null;

    }
}

/**
 * Returned topic object
 * @class
 */
class Topic extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic ID
         * @type {string || null}
         */
        this.TopicId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Remarks
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Note = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicId = 'TopicId' in params ? params.TopicId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Note = 'Note' in params ? params.Note : null;

    }
}

/**
 * DescribeTypeInstances response structure.
 * @class
 */
class DescribeTypeInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {InstanceResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new InstanceResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Tag object in instance details
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * ModifyAclRule response structure.
 * @class
 */
class ModifyAclRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique key of a rule
         * @type {number || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * BatchModifyGroupOffsets response structure.
 * @class
 */
class BatchModifyGroupOffsetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Security group routing information.
 * @class
 */
class SecurityGroupRoute extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the routing information.
         * @type {InstanceRoute || null}
         */
        this.InstanceRoute = null;

        /**
         * Specifies the security group list to associate.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * CKafka cluster instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Specifies the route vpcId.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Route vip.
         * @type {string || null}
         */
        this.Vip = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceRoute) {
            let obj = new InstanceRoute();
            obj.deserialize(params.InstanceRoute)
            this.InstanceRoute = obj;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Vip = 'Vip' in params ? params.Vip : null;

    }
}

/**
 * `DescribeGroup` response
 * @class
 */
class GroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Counting.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * GroupList
         * @type {Array.<DescribeGroup> || null}
         */
        this.GroupList = null;

        /**
         * Specifies the consumer group quota.
         * @type {number || null}
         */
        this.GroupCountQuota = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.GroupList) {
            this.GroupList = new Array();
            for (let z in params.GroupList) {
                let obj = new DescribeGroup();
                obj.deserialize(params.GroupList[z]);
                this.GroupList.push(obj);
            }
        }
        this.GroupCountQuota = 'GroupCountQuota' in params ? params.GroupCountQuota : null;

    }
}

/**
 * FetchMessageListByTimestamp request structure.
 * @class
 */
class FetchMessageListByTimestampRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Partition ID
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Query start time, a timestamp.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Maximum number of query results. default: 20. value range: 1-20.
         * @type {number || null}
         */
        this.SinglePartitionRecordNumber = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.SinglePartitionRecordNumber = 'SinglePartitionRecordNumber' in params ? params.SinglePartitionRecordNumber : null;

    }
}

/**
 * CreateDatahubTopic request structure.
 * @class
 */
class CreateDatahubTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name, a string of no more than 128 characters, must start with "AppId-" and can contain letters, digits, and hyphens (-).
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Number of partitions, which should be greater than 0.
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * Message retention period in milliseconds. The current minimum value is 60,000 ms.
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Topic remarks, which are a string of up to 128 characters. It can contain letters, digits, and hyphens (-) and must start with a letter.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Tag list
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.Note = 'Note' in params ? params.Note : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * Instance billing parameters
 * @class
 */
class InstanceChargeParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance billing mode (`PREPAID`: Monthly subscription; `POSTPAID_BY_HOUR`: Pay-as-you-go)
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Validity period, which is only required for the monthly subscription billing mode
         * @type {number || null}
         */
        this.InstanceChargePeriod = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.InstanceChargePeriod = 'InstanceChargePeriod' in params ? params.InstanceChargePeriod : null;

    }
}

/**
 * Data structure returned by pay-as-you-go instance APIs
 * @class
 */
class CreateInstancePostResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned code. `0` indicates normal status while other codes indicate errors.
         * @type {string || null}
         */
        this.ReturnCode = null;

        /**
         * Message returned by the API. An error message will be returned if the API reports an error. 
         * @type {string || null}
         */
        this.ReturnMessage = null;

        /**
         * Specifies the Data returned.
         * @type {CreateInstancePostData || null}
         */
        this.Data = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReturnCode = 'ReturnCode' in params ? params.ReturnCode : null;
        this.ReturnMessage = 'ReturnMessage' in params ? params.ReturnMessage : null;

        if (params.Data) {
            let obj = new CreateInstancePostData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }

    }
}

/**
 * DescribeDatahubTopic response structure.
 * @class
 */
class DescribeDatahubTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result object
         * @type {DescribeDatahubTopicResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new DescribeDatahubTopicResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerGroup request structure.
 * @class
 */
class DescribeConsumerGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the group name you want to query.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Specifies the corresponding topic name in the group to be queried by the user. if this parameter is specified while the group is unspecified, ignore this parameter.
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Returns the limit quantity of the consumption group. supports a maximum of 50.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Specifies the starting offset amount of the consumer group list.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeCvmInfo request structure.
 * @class
 */
class DescribeCvmInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * CreateConsumer response structure.
 * @class
 */
class CreateConsumerResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Create consumer group returned results.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreatePostPaidInstance request structure.
 * @class
 */
class CreatePostPaidInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC Id, obtain through the API [DescribeVpcs](https://www.tencentcloud.comom/document/product/215/15778?from_cn_redirect=1).
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet Id. can be obtained through the [DescribeSubnets](https://www.tencentcloud.comom/document/product/215/15784?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Specifies the cluster instance name of ckafka, an arbitrary character with length not exceeding 128.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Specifies the standard edition instance specification for the international site. currently only the international site standard edition uses the current field to distinguish specifications, while the domestic site standard edition distinguishes specifications by peak bandwidth. fill in 1 for all instances except the international site standard edition. for international site standard edition instances: [entry-level (general)] fill 1; [standard type (standard)] fill 2; [advanced] fill 3; [capacity type (capacity)] fill 4; [advanced type 1 (specialized-1)] fill 5; [advanced type 2 (specialized-2)] fill 6; [advanced type 3 (specialized-3)] fill 7; [advanced type 4 (specialized-4)] fill 8.
         * @type {number || null}
         */
        this.InstanceType = null;

        /**
         * The maximum instance log retention period in minutes by default.  If this parameter is left empty, the default retention period is 1,440 minutes (1 day) to 30 days.  If the message retention period of the topic is explicitly set, it will prevail.
         * @type {number || null}
         */
        this.MsgRetentionTime = null;

        /**
         * Cluster ID, which can be selected when you create an instance.  You don’t need to pass in this parameter if the cluster where the instance resides is not specified.
         * @type {number || null}
         */
        this.ClusterId = null;

        /**
         * Instance version. currently supports "2.4.1", "2.4.2", "2.8.1", "3.2.3". default value "2.4.1". "2.4.1" and "2.4.2" belong to the same version. any one can be passed.
         * @type {string || null}
         */
        this.KafkaVersion = null;

        /**
         * Instance type. "standard": standard version. "profession": pro edition. (standard version is only supported on the international site. currently, the chinese site supports pro edition.).
         * @type {string || null}
         */
        this.SpecificationsType = null;

        /**
         * Specifies the disk type for a pro edition instance. you do not need to fill it in for a standard edition instance. valid values: "CLOUD_SSD" for SSD CLOUD disk; "CLOUD_BASIC" for high-performance CLOUD block storage. default value: "CLOUD_BASIC".
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Specifies the peak bandwidth of the instance private network, with a default value of 40 MB/s. for standard version, input the peak bandwidth corresponding to the current instance specifications. note that if the instance created is a pro edition instance, parameter configuration such as peak bandwidth and number of partitions should meet the billing specification of the professional edition. view billing specifications through the following link: https://www.tencentcloud.comom/document/product/597/11745.?from_cn_redirect=1
         * @type {number || null}
         */
        this.BandWidth = null;

        /**
         * Instance disk size. default value is 500. step length is set to 100. should meet the billing specification of the current instance. can be accessed through the following link: https://www.tencentcloud.comom/document/product/597/122562.?from_cn_redirect=1
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Specifies the maximum number of partitions for the instance, which should meet the billing specification of the current instance. default value is 800 with a step length of 100. the billing specification can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122563.?from_cn_redirect=1
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Maximum number of topics for the instance should meet the billing specification of the current instance. default value is 800, step length is set to 100.
         * @type {number || null}
         */
        this.TopicNum = null;

        /**
         * Specifies the availability zone of the instance. when creating a multi-az instance, this parameter is the availability zone id of the subnet where the default access point is created. ZoneId and ZoneIds cannot be empty at the same time. obtain through the API [DescribeCkafkaZone](https://www.tencentcloud.comom/document/product/597/55246?from_cn_redirect=1).
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Whether the current instance is a multi-AZ instance
         * @type {boolean || null}
         */
        this.MultiZoneFlag = null;

        /**
         * Specifies the multi-az id list when the instance is a multi-az instance. note that the multi-az corresponding to parameter ZoneId must be included in this parameter array. ZoneId and ZoneIds cannot be empty at the same time. you can obtain this information through the [DescribeCkafkaZone](https://www.tencentcloud.comom/document/product/597/55246?from_cn_redirect=1) api.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * The number of purchased instances.  Default value: `1`. This parameter is optional.  If it is passed in, multiple instances will be created, with their names being `instanceName` plus different suffixes.
         * @type {number || null}
         */
        this.InstanceNum = null;

        /**
         * Public network bandwidth in Mbps.  The 3 Mbps of free bandwidth is not included here by default.  For example, if you need 3 Mbps of public network bandwidth, pass in `0`; if you need 6 Mbps, pass in `3`.  The value must be an integer multiple of 3.
         * @type {number || null}
         */
        this.PublicNetworkMonthly = null;

        /**
         * Tag.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Elastic bandwidth switch. valid values: 0 (disable, default), 1 (enable).
         * @type {number || null}
         */
        this.ElasticBandwidthSwitch = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.MsgRetentionTime = 'MsgRetentionTime' in params ? params.MsgRetentionTime : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.KafkaVersion = 'KafkaVersion' in params ? params.KafkaVersion : null;
        this.SpecificationsType = 'SpecificationsType' in params ? params.SpecificationsType : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.BandWidth = 'BandWidth' in params ? params.BandWidth : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.TopicNum = 'TopicNum' in params ? params.TopicNum : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.MultiZoneFlag = 'MultiZoneFlag' in params ? params.MultiZoneFlag : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.InstanceNum = 'InstanceNum' in params ? params.InstanceNum : null;
        this.PublicNetworkMonthly = 'PublicNetworkMonthly' in params ? params.PublicNetworkMonthly : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ElasticBandwidthSwitch = 'ElasticBandwidthSwitch' in params ? params.ElasticBandwidthSwitch : null;

    }
}

/**
 * Returned object for route information
 * @class
 */
class RouteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route Information List
         * @type {Array.<Route> || null}
         */
        this.Routers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Routers) {
            this.Routers = new Array();
            for (let z in params.Routers) {
                let obj = new Route();
                obj.deserialize(params.Routers[z]);
                this.Routers.push(obj);
            }
        }

    }
}

/**
 * DescribeGroup response structure.
 * @class
 */
class DescribeGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {GroupResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new GroupResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteAclRule request structure.
 * @class
 */
class DeleteAclRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance id information. you can obtain it through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * acl rule name, obtain through the API DescribeAclRule.
         * @type {string || null}
         */
        this.RuleName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;

    }
}

/**
 * Configuration object for modifying instance attributes
 * @class
 */
class ModifyInstanceAttributesConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Automatic creation. true: enabled, false: not enabled
         * @type {boolean || null}
         */
        this.AutoCreateTopicEnable = null;

        /**
         * Default number of partitions for a newly created topic. if AutoCreateTopicEnable is set to true and no value is set, defaults to 3.
         * @type {number || null}
         */
        this.DefaultNumPartitions = null;

        /**
         * Default number of replicas for a newly created topic. if AutoCreateTopicEnable is set to true and not specified, defaults to 2.
         * @type {number || null}
         */
        this.DefaultReplicationFactor = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoCreateTopicEnable = 'AutoCreateTopicEnable' in params ? params.AutoCreateTopicEnable : null;
        this.DefaultNumPartitions = 'DefaultNumPartitions' in params ? params.DefaultNumPartitions : null;
        this.DefaultReplicationFactor = 'DefaultReplicationFactor' in params ? params.DefaultReplicationFactor : null;

    }
}

/**
 * DescribeTaskStatus response structure.
 * @class
 */
class DescribeTaskStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {TaskStatusResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new TaskStatusResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Data structure returned by operation
 * @class
 */
class OperateResponseData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Flow ID.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * RouteIdDto
         * @type {RouteDTO || null}
         */
        this.RouteDTO = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;

        if (params.RouteDTO) {
            let obj = new RouteDTO();
            obj.deserialize(params.RouteDTO)
            this.RouteDTO = obj;
        }

    }
}

/**
 * CreateUser response structure.
 * @class
 */
class CreateUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRoute request structure.
 * @class
 */
class DescribeRouteRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Route ID
         * @type {number || null}
         */
        this.RouteId = null;

        /**
         * Specifies whether to display the primary route. when true, the routing list will additionally display the primary route information during instance creation (not affected by InternalFlag or UsedFor parameter filtering).	
         * @type {boolean || null}
         */
        this.MainRouteFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.MainRouteFlag = 'MainRouteFlag' in params ? params.MainRouteFlag : null;

    }
}

/**
 * CreatePartition response structure.
 * @class
 */
class CreatePartitionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result set
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Returned topic attributes result entity
 * @class
 */
class TopicAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic ID
         * @type {string || null}
         */
        this.TopicId = null;

        /**
         * Specifies the unix second-level timestamp of the creation time.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Describes the topic remark.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Number of partitions
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * IP allowlist switch. 1: enabled, 0: disabled
         * @type {number || null}
         */
        this.EnableWhiteList = null;

        /**
         * IP allowlist list
         * @type {Array.<string> || null}
         */
        this.IpWhiteList = null;

        /**
         * Topic configuration array
         * @type {Config || null}
         */
        this.Config = null;

        /**
         * Partition details
         * @type {Array.<TopicPartitionDO> || null}
         */
        this.Partitions = null;

        /**
         * ACL preset policy switch. valid values: 1 (on); 0 (off).
         * @type {number || null}
         */
        this.EnableAclRule = null;

        /**
         * Preset policy list.
         * @type {Array.<AclRule> || null}
         */
        this.AclRuleList = null;

        /**
         * topic throttling policy.
         * @type {InstanceQuotaConfigResp || null}
         */
        this.QuotaConfig = null;

        /**
         * Number of replicas
         * @type {number || null}
         */
        this.ReplicaNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicId = 'TopicId' in params ? params.TopicId : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.EnableWhiteList = 'EnableWhiteList' in params ? params.EnableWhiteList : null;
        this.IpWhiteList = 'IpWhiteList' in params ? params.IpWhiteList : null;

        if (params.Config) {
            let obj = new Config();
            obj.deserialize(params.Config)
            this.Config = obj;
        }

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new TopicPartitionDO();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }
        this.EnableAclRule = 'EnableAclRule' in params ? params.EnableAclRule : null;

        if (params.AclRuleList) {
            this.AclRuleList = new Array();
            for (let z in params.AclRuleList) {
                let obj = new AclRule();
                obj.deserialize(params.AclRuleList[z]);
                this.AclRuleList.push(obj);
            }
        }

        if (params.QuotaConfig) {
            let obj = new InstanceQuotaConfigResp();
            obj.deserialize(params.QuotaConfig)
            this.QuotaConfig = obj;
        }
        this.ReplicaNum = 'ReplicaNum' in params ? params.ReplicaNum : null;

    }
}

/**
 * `DescribeTopicSubscribeGroup` output parameters
 * @class
 */
class TopicSubscribeGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Number of consumer group status
         * @type {string || null}
         */
        this.StatusCountInfo = null;

        /**
         * Consumer group information.
         * @type {Array.<GroupInfoResponse> || null}
         */
        this.GroupsInfo = null;

        /**
         * Indicates whether the request is asynchronous. instances with fewer groups will return results directly with Status as 1. when there are more groups, the cache will be updated asynchronously. no group information will be returned when Status is 0 until the update is complete and results are returned with Status as 1.
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.StatusCountInfo = 'StatusCountInfo' in params ? params.StatusCountInfo : null;

        if (params.GroupsInfo) {
            this.GroupsInfo = new Array();
            for (let z in params.GroupsInfo) {
                let obj = new GroupInfoResponse();
                obj.deserialize(params.GroupsInfo[z]);
                this.GroupsInfo.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * Cluster information entity
 * @class
 */
class ClusterInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {number || null}
         */
        this.ClusterId = null;

        /**
         * Cluster name
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Maximum disk of the cluster (unit: GB).
         * @type {number || null}
         */
        this.MaxDiskSize = null;

        /**
         * Maximum bandwidth of the cluster. unit: MB/s.
         * @type {number || null}
         */
        this.MaxBandWidth = null;

        /**
         * Current availability of cluster disk (unit: GB).
         * @type {number || null}
         */
        this.AvailableDiskSize = null;

        /**
         * Available bandwidth of the cluster. unit: MB/s.
         * @type {number || null}
         */
        this.AvailableBandWidth = null;

        /**
         * Indicates the AZ to which the cluster belongs.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * The AZ where the cluster nodes are located. If the cluster is a cross-AZ cluster, it includes multiple AZs where the cluster nodes are located.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.MaxDiskSize = 'MaxDiskSize' in params ? params.MaxDiskSize : null;
        this.MaxBandWidth = 'MaxBandWidth' in params ? params.MaxBandWidth : null;
        this.AvailableDiskSize = 'AvailableDiskSize' in params ? params.AvailableDiskSize : null;
        this.AvailableBandWidth = 'AvailableBandWidth' in params ? params.AvailableBandWidth : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;

    }
}

/**
 * DeleteGroup request structure.
 * @class
 */
class DeleteGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id. can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name, which can be obtained through the DescribeConsumerGroup API (https://www.tencentcloud.comom/document/product/597/40841?from_cn_redirect=1).
         * @type {string || null}
         */
        this.Group = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Group = 'Group' in params ? params.Group : null;

    }
}

/**
 * DeleteInstancePost request structure.
 * @class
 */
class DeleteInstancePostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DeleteUser response structure.
 * @class
 */
class DeleteUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTopicProduceConnection request structure.
 * @class
 */
class DescribeTopicProduceConnectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic name, which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * CreateAcl request structure.
 * @class
 */
class CreateAclRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ACL resource type (`2`: TOPIC, `3`: GROUP, `4`: CLUSTER).
         * @type {number || null}
         */
        this.ResourceType = null;

        /**
         * ACL operation type (`2`: ALL, `3`: READ, `4`: WRITE, `5`: CREATE, `6`: DELETE, `7`: ALTER, `8`: DESCRIBE, `9`: CLUSTER_ACTION, `10`: DESCRIBE_CONFIGS, `11`: ALTER_CONFIGS, `12`: IDEMPOTENT_WRITE).
         * @type {number || null}
         */
        this.Operation = null;

        /**
         * Permission type (2:DENY, 3:ALLOW). currently ckafka supports ALLOW (equivalent to allowlist), others used when compatible with open-source kafka acl.
         * @type {number || null}
         */
        this.PermissionType = null;

        /**
         * Resource name, which is related to `resourceType`. For example, if `resourceType` is `TOPIC`, this field indicates the topic name; if `resourceType` is `GROUP`, this field indicates the group name; if `resourceType` is `CLUSTER`, this field can be left empty.
         * @type {string || null}
         */
        this.ResourceName = null;

        /**
         * Defaults to *, indicating any host is accessible in the entire region. supports filling in ips or ranges, and uses ";" for separation.
         * @type {string || null}
         */
        this.Host = null;

        /**
         * The list of users allowed to access the topic. Default: User:*, meaning all users. The current user must be in the user list. Add `User:` before the user name (`User:A` for example).
         * @type {string || null}
         */
        this.Principal = null;

        /**
         * The resource name list, which is in JSON string format. Either `ResourceName` or `resourceNameList` can be specified.
         * @type {string || null}
         */
        this.ResourceNameList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.PermissionType = 'PermissionType' in params ? params.PermissionType : null;
        this.ResourceName = 'ResourceName' in params ? params.ResourceName : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.Principal = 'Principal' in params ? params.Principal : null;
        this.ResourceNameList = 'ResourceNameList' in params ? params.ResourceNameList : null;

    }
}

/**
 * DescribeTopicSyncReplica response structure.
 * @class
 */
class DescribeTopicSyncReplicaResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returns topic replica details
         * @type {TopicInSyncReplicaResult || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new TopicInSyncReplicaResult();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * `TopicResponse` returned uniformly
 * @class
 */
class TopicResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of returned topic information.
         * @type {Array.<Topic> || null}
         */
        this.TopicList = null;

        /**
         * Number of eligible topics.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TopicList) {
            this.TopicList = new Array();
            for (let z in params.TopicList) {
                let obj = new Topic();
                obj.deserialize(params.TopicList[z]);
                this.TopicList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DeleteRoute response structure.
 * @class
 */
class DeleteRouteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Partition information
 * @class
 */
class Partitions extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition.
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Partition consumption offset.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeTopic response structure.
 * @class
 */
class DescribeTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {TopicResult || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new TopicResult();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Returned consumer group result entity
 * @class
 */
class ConsumerGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible consumer groups
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Topic list.
         * @type {Array.<ConsumerGroupTopic> || null}
         */
        this.TopicList = null;

        /**
         * Specifies the consumption group List.
         * @type {Array.<ConsumerGroup> || null}
         */
        this.GroupList = null;

        /**
         * Total number of partitions.
         * @type {number || null}
         */
        this.TotalPartition = null;

        /**
         * Monitored partition list.
         * @type {Array.<Partition> || null}
         */
        this.PartitionListForMonitor = null;

        /**
         * Total number of topics.
         * @type {number || null}
         */
        this.TotalTopic = null;

        /**
         * Monitored topic list.
         * @type {Array.<ConsumerGroupTopic> || null}
         */
        this.TopicListForMonitor = null;

        /**
         * Monitored group list.
         * @type {Array.<Group> || null}
         */
        this.GroupListForMonitor = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.TopicList) {
            this.TopicList = new Array();
            for (let z in params.TopicList) {
                let obj = new ConsumerGroupTopic();
                obj.deserialize(params.TopicList[z]);
                this.TopicList.push(obj);
            }
        }

        if (params.GroupList) {
            this.GroupList = new Array();
            for (let z in params.GroupList) {
                let obj = new ConsumerGroup();
                obj.deserialize(params.GroupList[z]);
                this.GroupList.push(obj);
            }
        }
        this.TotalPartition = 'TotalPartition' in params ? params.TotalPartition : null;

        if (params.PartitionListForMonitor) {
            this.PartitionListForMonitor = new Array();
            for (let z in params.PartitionListForMonitor) {
                let obj = new Partition();
                obj.deserialize(params.PartitionListForMonitor[z]);
                this.PartitionListForMonitor.push(obj);
            }
        }
        this.TotalTopic = 'TotalTopic' in params ? params.TotalTopic : null;

        if (params.TopicListForMonitor) {
            this.TopicListForMonitor = new Array();
            for (let z in params.TopicListForMonitor) {
                let obj = new ConsumerGroupTopic();
                obj.deserialize(params.TopicListForMonitor[z]);
                this.TopicListForMonitor.push(obj);
            }
        }

        if (params.GroupListForMonitor) {
            this.GroupListForMonitor = new Array();
            for (let z in params.GroupListForMonitor) {
                let obj = new Group();
                obj.deserialize(params.GroupListForMonitor[z]);
                this.GroupListForMonitor.push(obj);
            }
        }

    }
}

/**
 * CreateTopicIpWhiteList response structure.
 * @class
 */
class CreateTopicIpWhiteListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result of deleting topic IP allowlist
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Consumer group topic object
 * @class
 */
class GroupOffsetTopic extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * The topic partition array, where each element is a json object.
         * @type {Array.<GroupOffsetPartition> || null}
         */
        this.Partitions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Topic = 'Topic' in params ? params.Topic : null;

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new GroupOffsetPartition();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }

    }
}

/**
 * ModifyGroupOffsets response structure.
 * @class
 */
class ModifyGroupOffsetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Topic connection information
 * @class
 */
class DescribeConnectInfoResultDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IpAddr = null;

        /**
         * Connection time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Time = null;

        /**
         * Specifies whether supported versions are required or not.
         * @type {boolean || null}
         */
        this.IsUnSupportVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IpAddr = 'IpAddr' in params ? params.IpAddr : null;
        this.Time = 'Time' in params ? params.Time : null;
        this.IsUnSupportVersion = 'IsUnSupportVersion' in params ? params.IsUnSupportVersion : null;

    }
}

/**
 * Partition entity
 * @class
 */
class Partition extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition ID
         * @type {number || null}
         */
        this.PartitionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PartitionId = 'PartitionId' in params ? params.PartitionId : null;

    }
}

/**
 * CreateAcl response structure.
 * @class
 */
class CreateAclResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateTopic request structure.
 * @class
 */
class CreateTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance Id. you can obtain it by calling the DescribeInstances api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Can only contain letters, digits, underscores, "-", or ".".
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Number of partitions, which should be greater than 0
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * Number of replicas, which cannot be higher than the number of brokers. Maximum value: 3
         * @type {number || null}
         */
        this.ReplicaNum = null;

        /**
         * IP allowlist switch. 1: enabled, 0: disabled. Default value: 0
         * @type {number || null}
         */
        this.EnableWhiteList = null;

        /**
         * IP allowlist list for quota limit, which is required if `enableWhileList` is 1
         * @type {Array.<string> || null}
         */
        this.IpWhiteList = null;

        /**
         * Log cleanup policy, which is `delete` by default. `delete`: logs will be deleted by save time; `compact`: logs will be compressed by key; `compact, delete`: logs will be compressed by key and deleted by save time.
         * @type {string || null}
         */
        this.CleanUpPolicy = null;

        /**
         * Topic remark is a string of no more than 64 characters. the first character can be a letter or digit, and the remaining part can contain letters, digits, and hyphens (-).
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Minimum number of synchronous replicas, defaults to 1.
         * @type {number || null}
         */
        this.MinInsyncReplicas = null;

        /**
         * Whether to allow unsynchronized replicas to be elected as leader. valid values: 0 (not allowed), 1 (allowed). default: not allowed.
         * @type {number || null}
         */
        this.UncleanLeaderElectionEnable = null;

        /**
         * Optional parameter. specifies the message retention period in milliseconds. current min value is 60000. default value is 7200000 ms (2 hours). maximum value is 7776000000 ms (90 days).
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Duration of Segment shard scrolling in milliseconds. minimum value is 86400000 ms (1 day).
         * @type {number || null}
         */
        this.SegmentMs = null;

        /**
         * Maximum topic messages in Bytes. value range: 1024 (1 KB) to 12582912 (12 MB).
         * @type {number || null}
         */
        this.MaxMessageBytes = null;

        /**
         * Preset ACL rule. `1`: enable, `0`: disable. Default value: `0`.
         * @type {number || null}
         */
        this.EnableAclRule = null;

        /**
         * Name of the preset ACL rule.
         * @type {string || null}
         */
        this.AclRuleName = null;

        /**
         * Optional. retain file size. defaults to -1, unit Byte. current min value is 1073741824.
         * @type {number || null}
         */
        this.RetentionBytes = null;

        /**
         * Tag list.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Time type for message saving. valid values: CreateTime/LogAppendTime.
         * @type {string || null}
         */
        this.LogMsgTimestampType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.ReplicaNum = 'ReplicaNum' in params ? params.ReplicaNum : null;
        this.EnableWhiteList = 'EnableWhiteList' in params ? params.EnableWhiteList : null;
        this.IpWhiteList = 'IpWhiteList' in params ? params.IpWhiteList : null;
        this.CleanUpPolicy = 'CleanUpPolicy' in params ? params.CleanUpPolicy : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.MinInsyncReplicas = 'MinInsyncReplicas' in params ? params.MinInsyncReplicas : null;
        this.UncleanLeaderElectionEnable = 'UncleanLeaderElectionEnable' in params ? params.UncleanLeaderElectionEnable : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.SegmentMs = 'SegmentMs' in params ? params.SegmentMs : null;
        this.MaxMessageBytes = 'MaxMessageBytes' in params ? params.MaxMessageBytes : null;
        this.EnableAclRule = 'EnableAclRule' in params ? params.EnableAclRule : null;
        this.AclRuleName = 'AclRuleName' in params ? params.AclRuleName : null;
        this.RetentionBytes = 'RetentionBytes' in params ? params.RetentionBytes : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.LogMsgTimestampType = 'LogMsgTimestampType' in params ? params.LogMsgTimestampType : null;

    }
}

/**
 * DeleteAcl response structure.
 * @class
 */
class DeleteAclResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Dynamic message retention time configuration
 * @class
 */
class DynamicRetentionTime extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the dynamic message retention time configuration is enabled. 0: disabled; 1: enabled
Note: `null` may be returned for this field, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Enable = null;

        /**
         * Disk quota threshold (in percentage) for triggering the message retention time change event
Note: `null` may be returned for this field, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskQuotaPercentage = null;

        /**
         * Percentage by which the message retention time is shortened each time
Note: `null` may be returned for this field, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StepForwardPercentage = null;

        /**
         * Minimum retention time, in minutes
Note: `null` may be returned for this field, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BottomRetention = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.DiskQuotaPercentage = 'DiskQuotaPercentage' in params ? params.DiskQuotaPercentage : null;
        this.StepForwardPercentage = 'StepForwardPercentage' in params ? params.StepForwardPercentage : null;
        this.BottomRetention = 'BottomRetention' in params ? params.BottomRetention : null;

    }
}

/**
 * DescribeTopicSubscribeGroup request structure.
 * @class
 */
class DescribeTopicSubscribeGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Starting position of paging
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of results per page
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteInstancePre response structure.
 * @class
 */
class DeleteInstancePreResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {CreateInstancePreResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new CreateInstancePreResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DataHub topic response
 * @class
 */
class DatahubTopicResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic Id.
         * @type {string || null}
         */
        this.TopicId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.TopicId = 'TopicId' in params ? params.TopicId : null;

    }
}

/**
 * FetchMessageByOffset request structure.
 * @class
 */
class FetchMessageByOffsetRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic name, which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Partition ID
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Specifies the position information.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Public network bandwidth parameters
 * @class
 */
class InquiryPublicNetworkParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * Public network bandwidth billing mode (`BANDWIDTH_PREPAID`: Monthly subscription; `BANDWIDTH_POSTPAID_BY_HOUR`: Bill-by-hour)
         * @type {string || null}
         */
        this.PublicNetworkChargeType = null;

        /**
         * Public network bandwidth, in MB. value must be 0 or a multiple of 3.
         * @type {number || null}
         */
        this.PublicNetworkMonthly = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PublicNetworkChargeType = 'PublicNetworkChargeType' in params ? params.PublicNetworkChargeType : null;
        this.PublicNetworkMonthly = 'PublicNetworkMonthly' in params ? params.PublicNetworkMonthly : null;

    }
}

/**
 * Topic replica and details
 * @class
 */
class TopicInSyncReplicaInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition name
         * @type {string || null}
         */
        this.Partition = null;

        /**
         * Leader ID
         * @type {number || null}
         */
        this.Leader = null;

        /**
         * Replica set
         * @type {string || null}
         */
        this.Replica = null;

        /**
         * ISR
         * @type {string || null}
         */
        this.InSyncReplica = null;

        /**
         * Start Offset.
         * @type {number || null}
         */
        this.BeginOffset = null;

        /**
         * End Offset.
         * @type {number || null}
         */
        this.EndOffset = null;

        /**
         * Message count.
         * @type {number || null}
         */
        this.MessageCount = null;

        /**
         * Unsynced replica.
         * @type {string || null}
         */
        this.OutOfSyncReplica = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Leader = 'Leader' in params ? params.Leader : null;
        this.Replica = 'Replica' in params ? params.Replica : null;
        this.InSyncReplica = 'InSyncReplica' in params ? params.InSyncReplica : null;
        this.BeginOffset = 'BeginOffset' in params ? params.BeginOffset : null;
        this.EndOffset = 'EndOffset' in params ? params.EndOffset : null;
        this.MessageCount = 'MessageCount' in params ? params.MessageCount : null;
        this.OutOfSyncReplica = 'OutOfSyncReplica' in params ? params.OutOfSyncReplica : null;

    }
}

/**
 * DescribeRegion request structure.
 * @class
 */
class DescribeRegionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The offset value
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The maximum number of results returned
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Business field, which can be ignored.
         * @type {string || null}
         */
        this.Business = null;

        /**
         * CDC business field, which can be ignored.
         * @type {string || null}
         */
        this.CdcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Business = 'Business' in params ? params.Business : null;
        this.CdcId = 'CdcId' in params ? params.CdcId : null;

    }
}

/**
 * Instance configuration entity
 * @class
 */
class InstanceConfigDO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to create topics automatically
         * @type {boolean || null}
         */
        this.AutoCreateTopicsEnable = null;

        /**
         * Number of partitions
         * @type {number || null}
         */
        this.DefaultNumPartitions = null;

        /**
         * Default replication factor
         * @type {number || null}
         */
        this.DefaultReplicationFactor = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoCreateTopicsEnable = 'AutoCreateTopicsEnable' in params ? params.AutoCreateTopicsEnable : null;
        this.DefaultNumPartitions = 'DefaultNumPartitions' in params ? params.DefaultNumPartitions : null;
        this.DefaultReplicationFactor = 'DefaultReplicationFactor' in params ? params.DefaultReplicationFactor : null;

    }
}

/**
 * DeleteAclRule response structure.
 * @class
 */
class DeleteAclRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returns the rule ID of the deleted rule.
         * @type {number || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Returned user entity
 * @class
 */
class UserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the eligible users list.
         * @type {Array.<User> || null}
         */
        this.Users = null;

        /**
         * Total number of eligible users
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Users) {
            this.Users = new Array();
            for (let z in params.Users) {
                let obj = new User();
                obj.deserialize(params.Users[z]);
                this.Users.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DescribeCvmInfo response structure.
 * @class
 */
class DescribeCvmInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {ListCvmAndIpInfoRsp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new ListCvmAndIpInfoRsp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGroupInfo response structure.
 * @class
 */
class DescribeGroupInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {Array.<GroupInfoResponse> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new GroupInfoResponse();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyTopicAttributes response structure.
 * @class
 */
class ModifyTopicAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Message content that can be sent in batches
 * @class
 */
class BatchContent extends  AbstractModel {
    constructor(){
        super();

        /**
         * Message body that is sent.
         * @type {string || null}
         */
        this.Body = null;

        /**
         * Message sending key name.
         * @type {string || null}
         */
        this.Key = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Body = 'Body' in params ? params.Body : null;
        this.Key = 'Key' in params ? params.Key : null;

    }
}

/**
 * DeleteRouteTriggerTime response structure.
 * @class
 */
class DeleteRouteTriggerTimeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUser response structure.
 * @class
 */
class DescribeUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {UserResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new UserResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTopic request structure.
 * @class
 */
class DescribeTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Filter by `topicName`. Fuzzy search is supported
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Offset. If this parameter is left empty, 0 will be used by default
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of results to be returned, which defaults to 20 if left empty. The maximum value is 50.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Name of the preset ACL rule.
         * @type {string || null}
         */
        this.AclRuleName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.AclRuleName = 'AclRuleName' in params ? params.AclRuleName : null;

    }
}

/**
 * Mapping between orders and CKafka instances for monthly subscribed and pay-as-you-go instance APIs.
 * @class
 */
class DealInstanceDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Order transaction.
         * @type {string || null}
         */
        this.DealName = null;

        /**
         * Order transaction corresponds to the list of purchased CKafka instance ids.
         * @type {Array.<string> || null}
         */
        this.InstanceIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DealName = 'DealName' in params ? params.DealName : null;
        this.InstanceIdList = 'InstanceIdList' in params ? params.InstanceIdList : null;

    }
}

/**
 * CreatePartition request structure.
 * @class
 */
class CreatePartitionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic name, which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic partition count. the input parameter is the number of partitions after modification rather than adding partitions. therefore, the input parameter must exceed the current topic partition count.
         * @type {number || null}
         */
        this.PartitionNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;

    }
}

/**
 * Group entity
 * @class
 */
class Group extends  AbstractModel {
    constructor(){
        super();

        /**
         * Consumer group name.
         * @type {string || null}
         */
        this.GroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;

    }
}

/**
 * `GroupInfo` response data entity
 * @class
 */
class GroupInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error code. 0: success
         * @type {string || null}
         */
        this.ErrorCode = null;

        /**
         * Group status description (common valid values: Empty, Stable, Dead):
Dead: the consumer group does not exist
Empty: there are currently no consumer subscriptions in the consumer group
PreparingRebalance: the consumer group is currently in `rebalance` state
CompletingRebalance: the consumer group is currently in `rebalance` state
Stable: each consumer in the consumer group has joined and is in stable state
         * @type {string || null}
         */
        this.State = null;

        /**
         * The type of protocol selected by the consumer group, which is `consumer` for common consumers. However, some systems use their own protocols; for example, the protocol used by kafka-connect is `connect`. Only with the standard `consumer` protocol can this API get to know the specific assigning method and parse the specific partition assignment
         * @type {string || null}
         */
        this.ProtocolType = null;

        /**
         * Consumer partition assignment algorithm, such as `range` (which is the default value for the Kafka consumer SDK), `roundrobin`, and `sticky`
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * This array contains information only if `state` is `Stable` and `protocol_type` is `consumer`
         * @type {Array.<GroupInfoMember> || null}
         */
        this.Members = null;

        /**
         * Consumer group name.
         * @type {string || null}
         */
        this.Group = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorCode = 'ErrorCode' in params ? params.ErrorCode : null;
        this.State = 'State' in params ? params.State : null;
        this.ProtocolType = 'ProtocolType' in params ? params.ProtocolType : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;

        if (params.Members) {
            this.Members = new Array();
            for (let z in params.Members) {
                let obj = new GroupInfoMember();
                obj.deserialize(params.Members[z]);
                this.Members.push(obj);
            }
        }
        this.Group = 'Group' in params ? params.Group : null;

    }
}

/**
 * Returned result of consumer group offset
 * @class
 */
class GroupOffsetResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of eligible results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The topic partition array, where each element is a json object.
         * @type {Array.<GroupOffsetTopic> || null}
         */
        this.TopicList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.TopicList) {
            this.TopicList = new Array();
            for (let z in params.TopicList) {
                let obj = new GroupOffsetTopic();
                obj.deserialize(params.TopicList[z]);
                this.TopicList.push(obj);
            }
        }

    }
}

/**
 * Set of returned ACL results
 * @class
 */
class AclResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible data entries
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * ACL list.
         * @type {Array.<Acl> || null}
         */
        this.AclList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AclList) {
            this.AclList = new Array();
            for (let z in params.AclList) {
                let obj = new Acl();
                obj.deserialize(params.AclList[z]);
                this.AclList.push(obj);
            }
        }

    }
}

/**
 * The entity returned for the query of Kafka’s zone information
 * @class
 */
class ZoneResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * <P>Specifies the zone list.</p>.
         * @type {Array.<ZoneInfo> || null}
         */
        this.ZoneList = null;

        /**
         * <P>Maximum number of instances that can be purchased.</p>.
         * @type {number || null}
         */
        this.MaxBuyInstanceNum = null;

        /**
         * <p>Maximum purchase bandwidth in Mb/s.</p>.
         * @type {number || null}
         */
        this.MaxBandwidth = null;

        /**
         * <P>Unit price for postpayment.</p>.
         * @type {Price || null}
         */
        this.UnitPrice = null;

        /**
         * <P>Message unit price for postpayment.</p>.
         * @type {Price || null}
         */
        this.MessagePrice = null;

        /**
         * <P>User-Exclusive cluster information.</p>.
         * @type {Array.<ClusterInfo> || null}
         */
        this.ClusterInfo = null;

        /**
         * <P>Specifies the standard version configuration to purchase.</p>.
         * @type {string || null}
         */
        this.Standard = null;

        /**
         * <P>Specifies the purchase of standard version s2 configuration.</p>.
         * @type {string || null}
         */
        this.StandardS2 = null;

        /**
         * <P>Specifies the configuration for purchasing professional edition.</p>.
         * @type {string || null}
         */
        this.Profession = null;

        /**
         * <P>Purchase physical dedicated edition configuration.</p>.
         * @type {string || null}
         */
        this.Physical = null;

        /**
         * <p>Specifies the public network bandwidth. valid values: 3Mbps to 999Mbps. only supported in pro edition. abandoned, meaningless.</p>.
         * @type {string || null}
         */
        this.PublicNetwork = null;

        /**
         * <P>Public network bandwidth configuration.</p>.
         * @type {string || null}
         */
        this.PublicNetworkLimit = null;

        /**
         * <p>Request Id.</p>.
         * @type {string || null}
         */
        this.RequestId = null;

        /**
         * <P>Specifies the pagination offset.</p>.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * <P>Specifies the pagination limit.</p>.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * <P>Specifies whether the tag is mandatory.</p>.
         * @type {boolean || null}
         */
        this.ForceCheckTag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ZoneList) {
            this.ZoneList = new Array();
            for (let z in params.ZoneList) {
                let obj = new ZoneInfo();
                obj.deserialize(params.ZoneList[z]);
                this.ZoneList.push(obj);
            }
        }
        this.MaxBuyInstanceNum = 'MaxBuyInstanceNum' in params ? params.MaxBuyInstanceNum : null;
        this.MaxBandwidth = 'MaxBandwidth' in params ? params.MaxBandwidth : null;

        if (params.UnitPrice) {
            let obj = new Price();
            obj.deserialize(params.UnitPrice)
            this.UnitPrice = obj;
        }

        if (params.MessagePrice) {
            let obj = new Price();
            obj.deserialize(params.MessagePrice)
            this.MessagePrice = obj;
        }

        if (params.ClusterInfo) {
            this.ClusterInfo = new Array();
            for (let z in params.ClusterInfo) {
                let obj = new ClusterInfo();
                obj.deserialize(params.ClusterInfo[z]);
                this.ClusterInfo.push(obj);
            }
        }
        this.Standard = 'Standard' in params ? params.Standard : null;
        this.StandardS2 = 'StandardS2' in params ? params.StandardS2 : null;
        this.Profession = 'Profession' in params ? params.Profession : null;
        this.Physical = 'Physical' in params ? params.Physical : null;
        this.PublicNetwork = 'PublicNetwork' in params ? params.PublicNetwork : null;
        this.PublicNetworkLimit = 'PublicNetworkLimit' in params ? params.PublicNetworkLimit : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ForceCheckTag = 'ForceCheckTag' in params ? params.ForceCheckTag : null;

    }
}

/**
 * ModifyRoutineMaintenanceTask request structure.
 * @class
 */
class ModifyRoutineMaintenanceTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the ckafka cluster instance id. can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Automated operation and maintenance category. valid values: QUOTA, ANALYSIS, RE_BALANCE, ELASTIC_BANDWIDTH.
         * @type {string || null}
         */
        this.MaintenanceType = null;

        /**
         * INSTANCE_STORAGE_CAPACITY (automatic disk scale-out)/MESSAGE_RETENTION_PERIOD (dynamic MESSAGE RETENTION policy).
         * @type {string || null}
         */
        this.MaintenanceSubtype = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Task trigger threshold.
         * @type {number || null}
         */
        this.ConfigureThreshold = null;

        /**
         * Specifies the step length for task adjustment.
         * @type {number || null}
         */
        this.ConfigureStepSize = null;

        /**
         * Task adjustment upper limit.
         * @type {number || null}
         */
        this.ConfigureLimit = null;

        /**
         * Specifies the expected trigger time of the task, storing the offset in seconds from 0 AM of the current day.
         * @type {number || null}
         */
        this.PlannedTime = null;

        /**
         * Additional task information.
         * @type {string || null}
         */
        this.ExtraConfig = null;

        /**
         * Task status. 0: enabled, 1: disabled.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Specifies the day of the week.
         * @type {string || null}
         */
        this.Week = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.MaintenanceType = 'MaintenanceType' in params ? params.MaintenanceType : null;
        this.MaintenanceSubtype = 'MaintenanceSubtype' in params ? params.MaintenanceSubtype : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.ConfigureThreshold = 'ConfigureThreshold' in params ? params.ConfigureThreshold : null;
        this.ConfigureStepSize = 'ConfigureStepSize' in params ? params.ConfigureStepSize : null;
        this.ConfigureLimit = 'ConfigureLimit' in params ? params.ConfigureLimit : null;
        this.PlannedTime = 'PlannedTime' in params ? params.PlannedTime : null;
        this.ExtraConfig = 'ExtraConfig' in params ? params.ExtraConfig : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Week = 'Week' in params ? params.Week : null;

    }
}

/**
 * Instance object
 * @class
 */
class Instance extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the Name of the ckafka cluster instance.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance status. 0: creating, 1: running, 2: deleting, 3: deleted, 5: isolated, 7: upgrading, -1: creation failed.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Specifies whether the instance is open-source. valid values: true (open-source), false (not open-source).
         * @type {boolean || null}
         */
        this.IfCommunity = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.IfCommunity = 'IfCommunity' in params ? params.IfCommunity : null;

    }
}

/**
 * DescribeInstanceAttributes response structure.
 * @class
 */
class DescribeInstanceAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result object of instance attributes
         * @type {InstanceAttributesResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new InstanceAttributesResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyPassword response structure.
 * @class
 */
class ModifyPasswordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Returned topic details entity
 * @class
 */
class TopicDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of returned topic details.
         * @type {Array.<TopicDetail> || null}
         */
        this.TopicList = null;

        /**
         * Number of all eligible topic details
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TopicList) {
            this.TopicList = new Array();
            for (let z in params.TopicList) {
                let obj = new TopicDetail();
                obj.deserialize(params.TopicList[z]);
                this.TopicList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DeleteInstancePre request structure.
 * @class
 */
class DeleteInstancePreRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeDatahubTopic request structure.
 * @class
 */
class DescribeDatahubTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Elastic topic name.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * Advanced configuration object
 * @class
 */
class Config extends  AbstractModel {
    constructor(){
        super();

        /**
         * Message retention period in milliseconds.
         * @type {number || null}
         */
        this.Retention = null;

        /**
         * Minimum number of sync replications
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MinInsyncReplicas = null;

        /**
         * Log cleanup mode. Default value: delete.
delete: logs will be deleted by save time; compact: logs will be compressed by key; compact, delete: logs will be compressed by key and deleted by save time.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CleanUpPolicy = null;

        /**
         * Duration of Segment shard scrolling in milliseconds.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SegmentMs = null;

        /**
         * 0: false, 1: true.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UncleanLeaderElectionEnable = null;

        /**
         * Segment specifies the number of bytes for sharding scroll. unit: bytes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SegmentBytes = null;

        /**
         * Maximum message byte size. unit: bytes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxMessageBytes = null;

        /**
         * Specifies the message retention file size in Bytes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RetentionBytes = null;

        /**
         * The time type for message saving. CreateTime means the time when the producer created this message. LogAppendTime means the time when the broker received the message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LogMsgTimestampType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Retention = 'Retention' in params ? params.Retention : null;
        this.MinInsyncReplicas = 'MinInsyncReplicas' in params ? params.MinInsyncReplicas : null;
        this.CleanUpPolicy = 'CleanUpPolicy' in params ? params.CleanUpPolicy : null;
        this.SegmentMs = 'SegmentMs' in params ? params.SegmentMs : null;
        this.UncleanLeaderElectionEnable = 'UncleanLeaderElectionEnable' in params ? params.UncleanLeaderElectionEnable : null;
        this.SegmentBytes = 'SegmentBytes' in params ? params.SegmentBytes : null;
        this.MaxMessageBytes = 'MaxMessageBytes' in params ? params.MaxMessageBytes : null;
        this.RetentionBytes = 'RetentionBytes' in params ? params.RetentionBytes : null;
        this.LogMsgTimestampType = 'LogMsgTimestampType' in params ? params.LogMsgTimestampType : null;

    }
}

/**
 * ModifyPassword request structure.
 * @class
 */
class ModifyPasswordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance Id. you can obtain it by calling the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username, which can be obtained through the [DescribeUser](https://www.tencentcloud.comom/document/product/597/40855?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Current user password
         * @type {string || null}
         */
        this.Password = null;

        /**
         * New user password
         * @type {string || null}
         */
        this.PasswordNew = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Password = 'Password' in params ? params.Password : null;
        this.PasswordNew = 'PasswordNew' in params ? params.PasswordNew : null;

    }
}

/**
 * ModifyInstanceAttributes request structure.
 * @class
 */
class ModifyInstanceAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Maximum retention time of instance logs, in minutes, with a value range of 1min to 90 days.
         * @type {number || null}
         */
        this.MsgRetentionTime = null;

        /**
         * Specifies the Name of the ckafka cluster instance.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance configuration
         * @type {ModifyInstanceAttributesConfig || null}
         */
        this.Config = null;

        /**
         * Dynamic message retention policy configuration
         * @type {DynamicRetentionTime || null}
         */
        this.DynamicRetentionConfig = null;

        /**
         * Specifies the execution time of a scheduled task for edition upgrade or configuration upgrade in Unix timestamp, accurate to the second.
         * @type {number || null}
         */
        this.RebalanceTime = null;

        /**
         * Public network bandwidth. minimum 3 Mbps. maximum 999 Mbps. only the pro edition supports filling in.
         * @type {number || null}
         */
        this.PublicNetwork = null;

        /**
         * Dynamic disk expansion policy configuration.
         * @type {DynamicDiskConfig || null}
         */
        this.DynamicDiskConfig = null;

        /**
         * Single message size at the instance level (unit: byte). value range: 1024 (excluding) to 12582912 (excluding).
         * @type {number || null}
         */
        this.MaxMessageByte = null;

        /**
         * Whether to allow unsynchronized replicas to be elected as leader. valid values: 1 (enable), 0 (disable).
         * @type {number || null}
         */
        this.UncleanLeaderElectionEnable = null;

        /**
         * Instance deletion protection switch. 1: enabled; 0: disabled.
         * @type {number || null}
         */
        this.DeleteProtectionEnable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.MsgRetentionTime = 'MsgRetentionTime' in params ? params.MsgRetentionTime : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

        if (params.Config) {
            let obj = new ModifyInstanceAttributesConfig();
            obj.deserialize(params.Config)
            this.Config = obj;
        }

        if (params.DynamicRetentionConfig) {
            let obj = new DynamicRetentionTime();
            obj.deserialize(params.DynamicRetentionConfig)
            this.DynamicRetentionConfig = obj;
        }
        this.RebalanceTime = 'RebalanceTime' in params ? params.RebalanceTime : null;
        this.PublicNetwork = 'PublicNetwork' in params ? params.PublicNetwork : null;

        if (params.DynamicDiskConfig) {
            let obj = new DynamicDiskConfig();
            obj.deserialize(params.DynamicDiskConfig)
            this.DynamicDiskConfig = obj;
        }
        this.MaxMessageByte = 'MaxMessageByte' in params ? params.MaxMessageByte : null;
        this.UncleanLeaderElectionEnable = 'UncleanLeaderElectionEnable' in params ? params.UncleanLeaderElectionEnable : null;
        this.DeleteProtectionEnable = 'DeleteProtectionEnable' in params ? params.DeleteProtectionEnable : null;

    }
}

/**
 * DescribeRegion response structure.
 * @class
 */
class DescribeRegionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returns the region enumeration result list.
         * @type {Array.<Region> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new Region();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateTopic response structure.
 * @class
 */
class CreateTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned creation result
         * @type {CreateTopicResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new CreateTopicResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Virtual IP entity
 * @class
 */
class VipEntity extends  AbstractModel {
    constructor(){
        super();

        /**
         * Virtual IP
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Virtual port
         * @type {string || null}
         */
        this.Vport = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;

    }
}

/**
 * DescribeTopicProduceConnection response structure.
 * @class
 */
class DescribeTopicProduceConnectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result set of returned connection information
         * @type {Array.<DescribeConnectInfoResultDTO> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new DescribeConnectInfoResultDTO();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceAttributes response structure.
 * @class
 */
class ModifyInstanceAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Consumer group topic object
 * @class
 */
class ConsumerGroupTopic extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic ID
         * @type {string || null}
         */
        this.TopicId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicId = 'TopicId' in params ? params.TopicId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * User entity
 * @class
 */
class User extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID
         * @type {number || null}
         */
        this.UserId = null;

        /**
         * Username
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Last updated time
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * CreateAclRule response structure.
 * @class
 */
class CreateAclRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique key of a rule
         * @type {number || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTopicAttributes response structure.
 * @class
 */
class DescribeTopicAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result object
         * @type {TopicAttributesResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new TopicAttributesResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpgradeBrokerVersion response structure.
 * @class
 */
class UpgradeBrokerVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Upgrade result.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Data structure returned by the pay-as-you-go instance creation API
 * @class
 */
class CreateInstancePostData extends  AbstractModel {
    constructor(){
        super();

        /**
         * CreateInstancePre returns fixed as 0. it cannot be used as a query condition for CheckTaskStatus. this is merely to ensure alignment with the backend data structure.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Order ID list
         * @type {Array.<string> || null}
         */
        this.DealNames = null;

        /**
         * The ckafka cluster instance Id. by default, returns the Id of the first purchased instance when purchasing multiple instances.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Order and purchase mapping list corresponding to the instance.
         * @type {Array.<DealInstanceDTO> || null}
         */
        this.DealNameInstanceIdMapping = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.DealNames = 'DealNames' in params ? params.DealNames : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.DealNameInstanceIdMapping) {
            this.DealNameInstanceIdMapping = new Array();
            for (let z in params.DealNameInstanceIdMapping) {
                let obj = new DealInstanceDTO();
                obj.deserialize(params.DealNameInstanceIdMapping[z]);
                this.DealNameInstanceIdMapping.push(obj);
            }
        }

    }
}

/**
 * DescribeGroupOffsets request structure.
 * @class
 */
class DescribeGroupOffsetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Kafka consumer group
         * @type {string || null}
         */
        this.Group = null;

        /**
         * Array of the names of topics subscribed to by a group. If there is no such array, this parameter means the information of all topics in the specified group
         * @type {Array.<string> || null}
         */
        this.Topics = null;

        /**
         * Fuzzy match by `topicName`
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Offset position of this query. Default value: 0
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of results to be returned in this request. Default value: 50. Maximum value: 50
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Group = 'Group' in params ? params.Group : null;
        this.Topics = 'Topics' in params ? params.Topics : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteRouteTriggerTime request structure.
 * @class
 */
class DeleteRouteTriggerTimeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Modifies the scheduled time for deleting routes.
         * @type {string || null}
         */
        this.DelayTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DelayTime = 'DelayTime' in params ? params.DelayTime : null;

    }
}

/**
 * Group offset partition object
 * @class
 */
class GroupOffsetPartition extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic `partitionId`
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Offset position submitted by consumer
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Supports consumers to submit messages with imported metadata for other purposes, currently an empty string.
         * @type {string || null}
         */
        this.Metadata = null;

        /**
         * Error code
         * @type {number || null}
         */
        this.ErrorCode = null;

        /**
         * Latest offset of current partition
         * @type {number || null}
         */
        this.LogEndOffset = null;

        /**
         * Number of unconsumed messages
         * @type {number || null}
         */
        this.Lag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Metadata = 'Metadata' in params ? params.Metadata : null;
        this.ErrorCode = 'ErrorCode' in params ? params.ErrorCode : null;
        this.LogEndOffset = 'LogEndOffset' in params ? params.LogEndOffset : null;
        this.Lag = 'Lag' in params ? params.Lag : null;

    }
}

/**
 * DescribeInstances request structure.
 * @class
 */
class DescribeInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * (Query condition) filter by the ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Search term. example: (query condition) filter by instance name. fuzzy query is supported.
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Instance status (query condition). valid values: 0: creating, 1: running, 2: deleting, 5: isolated, 7: upgrading. default return: all.
         * @type {Array.<number> || null}
         */
        this.Status = null;

        /**
         * Offset. If this parameter is left empty, 0 will be used by default
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of results to be returned. If this parameter is left empty, 10 will be used by default. The maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Tag key value (this field has been deprecated).
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * (Query condition) VPC Id.
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * Returned result object of instance attributes
 * @class
 */
class InstanceAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the Name of the ckafka cluster instance.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * VIP list information of access point
         * @type {Array.<VipEntity> || null}
         */
        this.VipList = null;

        /**
         * Virtual IP
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Virtual port
         * @type {string || null}
         */
        this.Vport = null;

        /**
         * Instance status. 0: creating, 1: running, 2: deleting, 3: deleted, 5: isolated, 7: upgrading, -1: creation failed.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Instance bandwidth in Mbps
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Instance storage capacity in GB
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * AZ
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * VPC ID. If this parameter is empty, it means the basic network
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID. If this parameter is empty, it means the basic network
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Instance health status. 1: healthy, 2: alarmed, 3: exceptional
         * @type {number || null}
         */
        this.Healthy = null;

        /**
         * Instance health information. Currently, the disk utilization is displayed with a maximum length of 256
         * @type {string || null}
         */
        this.HealthyMessage = null;

        /**
         * Creation time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Message retention period in minutes
         * @type {number || null}
         */
        this.MsgRetentionTime = null;

        /**
         * Configuration for automatic topic creation. If this field is empty, it means that automatic creation is not enabled
         * @type {InstanceConfigDO || null}
         */
        this.Config = null;

        /**
         * Number of remaining creatable partitions
         * @type {number || null}
         */
        this.RemainderPartitions = null;

        /**
         * Number of remaining creatable topics
         * @type {number || null}
         */
        this.RemainderTopics = null;

        /**
         * Number of partitions already created
         * @type {number || null}
         */
        this.CreatedPartitions = null;

        /**
         * Number of topics already created
         * @type {number || null}
         */
        this.CreatedTopics = null;

        /**
         * Tag array
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Expiration time
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Availability Zone List
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * Specifies the ckafka cluster instance version.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Maximum number of groups.
         * @type {number || null}
         */
        this.MaxGroupNum = null;

        /**
         * Sale type. valid values: 0 (standard version), 1 (pro edition).
         * @type {number || null}
         */
        this.Cvm = null;

        /**
         * Instance type. valid values:. 
Specifies the pro edition.    
Standard version.
premium. specifies the advanced edition.
Specifies the serverless version.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Indicates the characteristics supported by the instance. FEATURE_SUBNET_ACL means the policy support for configuring subnets.
         * @type {Array.<string> || null}
         */
        this.Features = null;

        /**
         * Dynamic message retention policy.
         * @type {DynamicRetentionTime || null}
         */
        this.RetentionTimeConfig = null;

        /**
         * Maximum number of connections.
         * @type {number || null}
         */
        this.MaxConnection = null;

        /**
         * Public network bandwidth
         * @type {number || null}
         */
        this.PublicNetwork = null;

        /**
         * Specifies the deprecated field with no actual meaning.
         * @type {string || null}
         */
        this.DeleteRouteTimestamp = null;

        /**
         * Number of remaining creatable partitions.
         * @type {number || null}
         */
        this.RemainingPartitions = null;

        /**
         * Number of remaining creatable topics.
         * @type {number || null}
         */
        this.RemainingTopics = null;

        /**
         * Scaling policy for dynamic disk.
         * @type {DynamicDiskConfig || null}
         */
        this.DynamicDiskConfig = null;

        /**
         * Specifies the system maintenance time.
         * @type {string || null}
         */
        this.SystemMaintenanceTime = null;

        /**
         * Specifies the maximum size of messages at the instance level.
         * @type {number || null}
         */
        this.MaxMessageByte = null;

        /**
         * Specifies the instance billing type. POSTPAID_BY_HOUR: hourly billing; PREPAID: annual/monthly package.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Whether to enable the elastic bandwidth allowlist.   
Indicates the allowlist feature with elastic bandwidth enabled.
0: elastic bandwidth allowlist feature is disabled.
         * @type {number || null}
         */
        this.ElasticBandwidthSwitch = null;

        /**
         * Indicates the elastic bandwidth activation status.
1: indicates elastic bandwidth is disabled.
Enable elastic bandwidth.
Enable elastic bandwidth successfully.
33: disabling elastic bandwidth.
Indicates that the elastic bandwidth is successfully disabled.
Enable elastic bandwidth failed.
Bandwidth failure.
         * @type {number || null}
         */
        this.ElasticBandwidthOpenStatus = null;

        /**
         * Cluster type.  
CLOUD_IDC idc cluster.
CLOUD_CVM_SHARE shared cluster.
CLOUD_CVM_YUNTI yunti cvm cluster.
CLOUD_CVM. specifies the cvm cluster.
CLOUD_CDC cdc cluster.
CLOUD_EKS_TSE eks cluster.
         * @type {string || null}
         */
        this.ClusterType = null;

        /**
         * Number of free partitions.
         * @type {number || null}
         */
        this.FreePartitionNumber = null;

        /**
         * Specifies the elastic bandwidth upper limit.
         * @type {number || null}
         */
        this.ElasticFloatBandwidth = null;

        /**
         * ssl custom certificate id. only returned for instance clusters with custom certificates.
         * @type {string || null}
         */
        this.CustomCertId = null;

        /**
         * Default unclean.leader.election.enable configuration for cluster topic: 1 enable 0 disable.
         * @type {number || null}
         */
        this.UncleanLeaderElectionEnable = null;

        /**
         * Instance deletion protection switch. 1: enabled; 0: disabled.
         * @type {number || null}
         */
        this.DeleteProtectionEnable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

        if (params.VipList) {
            this.VipList = new Array();
            for (let z in params.VipList) {
                let obj = new VipEntity();
                obj.deserialize(params.VipList[z]);
                this.VipList.push(obj);
            }
        }
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Healthy = 'Healthy' in params ? params.Healthy : null;
        this.HealthyMessage = 'HealthyMessage' in params ? params.HealthyMessage : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.MsgRetentionTime = 'MsgRetentionTime' in params ? params.MsgRetentionTime : null;

        if (params.Config) {
            let obj = new InstanceConfigDO();
            obj.deserialize(params.Config)
            this.Config = obj;
        }
        this.RemainderPartitions = 'RemainderPartitions' in params ? params.RemainderPartitions : null;
        this.RemainderTopics = 'RemainderTopics' in params ? params.RemainderTopics : null;
        this.CreatedPartitions = 'CreatedPartitions' in params ? params.CreatedPartitions : null;
        this.CreatedTopics = 'CreatedTopics' in params ? params.CreatedTopics : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.MaxGroupNum = 'MaxGroupNum' in params ? params.MaxGroupNum : null;
        this.Cvm = 'Cvm' in params ? params.Cvm : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.Features = 'Features' in params ? params.Features : null;

        if (params.RetentionTimeConfig) {
            let obj = new DynamicRetentionTime();
            obj.deserialize(params.RetentionTimeConfig)
            this.RetentionTimeConfig = obj;
        }
        this.MaxConnection = 'MaxConnection' in params ? params.MaxConnection : null;
        this.PublicNetwork = 'PublicNetwork' in params ? params.PublicNetwork : null;
        this.DeleteRouteTimestamp = 'DeleteRouteTimestamp' in params ? params.DeleteRouteTimestamp : null;
        this.RemainingPartitions = 'RemainingPartitions' in params ? params.RemainingPartitions : null;
        this.RemainingTopics = 'RemainingTopics' in params ? params.RemainingTopics : null;

        if (params.DynamicDiskConfig) {
            let obj = new DynamicDiskConfig();
            obj.deserialize(params.DynamicDiskConfig)
            this.DynamicDiskConfig = obj;
        }
        this.SystemMaintenanceTime = 'SystemMaintenanceTime' in params ? params.SystemMaintenanceTime : null;
        this.MaxMessageByte = 'MaxMessageByte' in params ? params.MaxMessageByte : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.ElasticBandwidthSwitch = 'ElasticBandwidthSwitch' in params ? params.ElasticBandwidthSwitch : null;
        this.ElasticBandwidthOpenStatus = 'ElasticBandwidthOpenStatus' in params ? params.ElasticBandwidthOpenStatus : null;
        this.ClusterType = 'ClusterType' in params ? params.ClusterType : null;
        this.FreePartitionNumber = 'FreePartitionNumber' in params ? params.FreePartitionNumber : null;
        this.ElasticFloatBandwidth = 'ElasticFloatBandwidth' in params ? params.ElasticFloatBandwidth : null;
        this.CustomCertId = 'CustomCertId' in params ? params.CustomCertId : null;
        this.UncleanLeaderElectionEnable = 'UncleanLeaderElectionEnable' in params ? params.UncleanLeaderElectionEnable : null;
        this.DeleteProtectionEnable = 'DeleteProtectionEnable' in params ? params.DeleteProtectionEnable : null;

    }
}

/**
 * DescribeDatahubTopics response structure.
 * @class
 */
class DescribeDatahubTopicsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic list.
         * @type {DescribeDatahubTopicsResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new DescribeDatahubTopicsResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGroup request structure.
 * @class
 */
class DescribeGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Search keyword
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of results to be returned
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Only supported for GroupState filter criteria. valid values: Empty, Stable. note: this parameter can only be accessed in versions 2.8/3.2.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Query filter.
Describes the key-value pair filter, which is used for conditional filtering queries. for example, filter by ID, name, and status.
If there are multiple filters, the logical relationship between them is AND.
If the same Filter contains multiple Values, the relationship between Values under the same Filter is logical OR.
>
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field to be filtered.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filter value of field.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * BatchCreateAcl response structure.
 * @class
 */
class BatchCreateAclResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Status code: 0 - modification succeeded, otherwise modification failed.
         * @type {number || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSecurityGroupRoutes request structure.
 * @class
 */
class DescribeSecurityGroupRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the routing information.
         * @type {InstanceRoute || null}
         */
        this.InstanceRoute = null;

        /**
         * Filter.
         * @type {Array.<RouteFilter> || null}
         */
        this.Filters = null;

        /**
         * Specifies the pagination Offset. default is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination Limit. default: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Keyword. specifies fuzzy search by instance id, instance name, or vip.
         * @type {string || null}
         */
        this.SearchWord = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceRoute) {
            let obj = new InstanceRoute();
            obj.deserialize(params.InstanceRoute)
            this.InstanceRoute = obj;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new RouteFilter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;

    }
}

/**
 * ModifyInstancePre response structure.
 * @class
 */
class ModifyInstancePreResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Response structure of modifying the configurations of a prepaid instance.
         * @type {CreateInstancePreResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new CreateInstancePreResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateUser request structure.
 * @class
 */
class CreateUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Username
         * @type {string || null}
         */
        this.Name = null;

        /**
         * User password
         * @type {string || null}
         */
        this.Password = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Password = 'Password' in params ? params.Password : null;

    }
}

/**
 * Returned result of instance details
 * @class
 */
class InstanceDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of eligible instances
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of eligible instance details
         * @type {Array.<InstanceDetail> || null}
         */
        this.InstanceList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.InstanceList) {
            this.InstanceList = new Array();
            for (let z in params.InstanceList) {
                let obj = new InstanceDetail();
                obj.deserialize(params.InstanceList[z]);
                this.InstanceList.push(obj);
            }
        }

    }
}

/**
 * DeleteRoute request structure.
 * @class
 */
class DeleteRouteRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Route id, obtain through the API [DescribeRoute](https://www.tencentcloud.comom/document/product/597/45484?from_cn_redirect=1).
         * @type {number || null}
         */
        this.RouteId = null;

        /**
         * AppId of the caller.
         * @type {number || null}
         */
        this.CallerAppid = null;

        /**
         * Sets the scheduled deletion time for routes. only public network routes support scheduled deletion. available for any time within the next 24 hours.
         * @type {string || null}
         */
        this.DeleteRouteTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.CallerAppid = 'CallerAppid' in params ? params.CallerAppid : null;
        this.DeleteRouteTime = 'DeleteRouteTime' in params ? params.DeleteRouteTime : null;

    }
}

/**
 * DeleteTopicIpWhiteList response structure.
 * @class
 */
class DeleteTopicIpWhiteListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result of deleting topic IP allowlist
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateInstancePre response structure.
 * @class
 */
class CreateInstancePreResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {CreateInstancePreResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new CreateInstancePreResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CVM and IP information.
 * @class
 */
class CvmAndIpInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.CkafkaInstanceId = null;

        /**
         * CVM instance ID (ins-test) or POD IP (10.0.0.30).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * IP address.
         * @type {string || null}
         */
        this.Ip = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CkafkaInstanceId = 'CkafkaInstanceId' in params ? params.CkafkaInstanceId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Ip = 'Ip' in params ? params.Ip : null;

    }
}

/**
 * DescribeInstancesDetail request structure.
 * @class
 */
class DescribeInstancesDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * (Filter) filter by instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Filter by instance name, instance ID, AZ, VPC ID, or subnet ID. Fuzzy query is supported.
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * (Filter) instance status. 0: creating, 1: running, 2: deleting. If this parameter is left empty, all instances will be returned by default
         * @type {Array.<number> || null}
         */
        this.Status = null;

        /**
         * Offset. If this parameter is left empty, `0` will be used by default.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. If this parameter is left empty, `10` will be used by default. The maximum value is `20`.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Tag key match.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Filter. Valid values of `filter.Name` include `Ip`, `VpcId`, `SubNetId`, `InstanceType`, and `InstanceId`. Up to 10 values can be passed for `filter.Values`.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * This parameter has been deprecated and replaced with `InstanceIdList`.
         * @type {string || null}
         */
        this.InstanceIds = null;

        /**
         * Filter by instance ID.
         * @type {Array.<string> || null}
         */
        this.InstanceIdList = null;

        /**
         * Filter instances by a set of tags
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.TagKey = 'TagKey' in params ? params.TagKey : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;
        this.InstanceIdList = 'InstanceIdList' in params ? params.InstanceIdList : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }

    }
}

/**
 * Region entity object
 * @class
 */
class Region extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region ID
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Region name
         * @type {string || null}
         */
        this.RegionName = null;

        /**
         * Area name
         * @type {string || null}
         */
        this.AreaName = null;

        /**
         * Region code.
         * @type {string || null}
         */
        this.RegionCode = null;

        /**
         * Region code (V3 version).
         * @type {string || null}
         */
        this.RegionCodeV3 = null;

        /**
         * Specifies the default value does not support any special type instance type.
         * @type {string || null}
         */
        this.Support = null;

        /**
         * Whether ipv6 is supported. 0: indicates no support. 1: indicates support.
         * @type {number || null}
         */
        this.Ipv6 = null;

        /**
         * Whether cross-az is supported. valid values: 0 (unsupported), 1 (supported).
         * @type {number || null}
         */
        this.MultiZone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.RegionName = 'RegionName' in params ? params.RegionName : null;
        this.AreaName = 'AreaName' in params ? params.AreaName : null;
        this.RegionCode = 'RegionCode' in params ? params.RegionCode : null;
        this.RegionCodeV3 = 'RegionCodeV3' in params ? params.RegionCodeV3 : null;
        this.Support = 'Support' in params ? params.Support : null;
        this.Ipv6 = 'Ipv6' in params ? params.Ipv6 : null;
        this.MultiZone = 'MultiZone' in params ? params.MultiZone : null;

    }
}

/**
 * InstanceScalingDown response structure.
 * @class
 */
class InstanceScalingDownResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results.
         * @type {ScalingDownResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new ScalingDownResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateConsumer request structure.
 * @class
 */
class CreateConsumerRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Topic name. one of TopicName or TopicNameList must display a specified existing topic name.
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic name list.
         * @type {Array.<string> || null}
         */
        this.TopicNameList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.TopicNameList = 'TopicNameList' in params ? params.TopicNameList : null;

    }
}

/**
 * InquireCkafkaPrice response structure.
 * @class
 */
class InquireCkafkaPriceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {InquireCkafkaPriceResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new InquireCkafkaPriceResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDatahubTopic response structure.
 * @class
 */
class CreateDatahubTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned creation result
         * @type {DatahubTopicResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new DatahubTopicResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreatePostPaidInstance response structure.
 * @class
 */
class CreatePostPaidInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result
         * @type {CreateInstancePostResp || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new CreateInstancePostResp();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RouteDTO
 * @class
 */
class RouteDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route ID
         * @type {number || null}
         */
        this.RouteId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteId = 'RouteId' in params ? params.RouteId : null;

    }
}

/**
 * Disk purchase parameters
 * @class
 */
class InquiryDiskParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * Disk type. Valid values: `SSD` (SSD), `CLOUD_SSD` (SSD cloud disk), `CLOUD_PREMIUM` (Premium cloud disk), `CLOUD_BASIC` (Cloud disk).
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Size of the purchased disk in GB
         * @type {number || null}
         */
        this.DiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;

    }
}

/**
 * Set of topic replicas and details
 * @class
 */
class TopicInSyncReplicaResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Set of topic details and replicas
         * @type {Array.<TopicInSyncReplicaInfo> || null}
         */
        this.TopicInSyncReplicaList = null;

        /**
         * Total number
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TopicInSyncReplicaList) {
            this.TopicInSyncReplicaList = new Array();
            for (let z in params.TopicInSyncReplicaList) {
                let obj = new TopicInSyncReplicaInfo();
                obj.deserialize(params.TopicInSyncReplicaList[z]);
                this.TopicInSyncReplicaList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * Instance downsizing response.
 * @class
 */
class ScalingDownResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Order ID list
         * @type {Array.<string> || null}
         */
        this.DealNames = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DealNames = 'DealNames' in params ? params.DealNames : null;

    }
}

/**
 * SendMessage response structure.
 * @class
 */
class SendMessageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Message ID list.
         * @type {Array.<string> || null}
         */
        this.MessageId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MessageId = 'MessageId' in params ? params.MessageId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Response parameters for instance price query
 * @class
 */
class InquiryBasePrice extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price unit.
         * @type {number || null}
         */
        this.UnitPrice = null;

        /**
         * Discount unit price.
         * @type {number || null}
         */
        this.UnitPriceDiscount = null;

        /**
         * Total original price.
         * @type {number || null}
         */
        this.OriginalPrice = null;

        /**
         * Total discount price.
         * @type {number || null}
         */
        this.DiscountPrice = null;

        /**
         * Discount (unit: %).
         * @type {number || null}
         */
        this.Discount = null;

        /**
         * Number of purchased items
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.GoodsNum = null;

        /**
         * Currency for payment
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Currency = null;

        /**
         * Dedicated disk response parameter
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Validity period
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Unit of the validity period (`m`: Month; `h`: Hour)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Purchase quantity.
         * @type {number || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UnitPrice = 'UnitPrice' in params ? params.UnitPrice : null;
        this.UnitPriceDiscount = 'UnitPriceDiscount' in params ? params.UnitPriceDiscount : null;
        this.OriginalPrice = 'OriginalPrice' in params ? params.OriginalPrice : null;
        this.DiscountPrice = 'DiscountPrice' in params ? params.DiscountPrice : null;
        this.Discount = 'Discount' in params ? params.Discount : null;
        this.GoodsNum = 'GoodsNum' in params ? params.GoodsNum : null;
        this.Currency = 'Currency' in params ? params.Currency : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * DescribeCkafkaZone response structure.
 * @class
 */
class DescribeCkafkaZoneResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results for the query
         * @type {ZoneResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new ZoneResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * BatchModifyGroupOffsets request structure.
 * @class
 */
class BatchModifyGroupOffsetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Consumer group name.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Partition information.
         * @type {Array.<Partitions> || null}
         */
        this.Partitions = null;

        /**
         * Name of the specified topic. Default value: names of all topics.
         * @type {Array.<string> || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new Partitions();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * CVM and IP information list.
 * @class
 */
class ListCvmAndIpInfoRsp extends  AbstractModel {
    constructor(){
        super();

        /**
         * cvm and IP list.
         * @type {Array.<CvmAndIpInfo> || null}
         */
        this.CvmList = null;

        /**
         * Specifies the instance data volume.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CvmList) {
            this.CvmList = new Array();
            for (let z in params.CvmList) {
                let obj = new CvmAndIpInfo();
                obj.deserialize(params.CvmList[z]);
                this.CvmList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * CreateRoute response structure.
 * @class
 */
class CreateRouteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * <P>Returned result.</p>.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Aggregated returned result of instance status
 * @class
 */
class InstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the list of instances meeting the conditions.
         * @type {Array.<Instance> || null}
         */
        this.InstanceList = null;

        /**
         * Total results that meet the conditions.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceList) {
            this.InstanceList = new Array();
            for (let z in params.InstanceList) {
                let obj = new Instance();
                obj.deserialize(params.InstanceList[z]);
                this.InstanceList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DataHub topic
 * @class
 */
class DatahubTopicDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic ID
         * @type {string || null}
         */
        this.TopicId = null;

        /**
         * The number of partitions
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * Expiration time in milliseconds.
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Status (`1`: In use; `2`: Deleting)
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.TopicId = 'TopicId' in params ? params.TopicId : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DescribeGroupInfo request structure.
 * @class
 */
class DescribeGroupInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Kafka group list. obtain through the API [DescribeConsumerGroup](https://www.tencentcloud.comom/document/product/597/40841?from_cn_redirect=1).
         * @type {Array.<string> || null}
         */
        this.GroupList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.GroupList = 'GroupList' in params ? params.GroupList : null;

    }
}

/**
 * `DescribeGroup` response entity
 * @class
 */
class DescribeGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Consumer group name.
         * @type {string || null}
         */
        this.Group = null;

        /**
         * Protocol used by the group.
         * @type {string || null}
         */
        this.Protocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Group = 'Group' in params ? params.Group : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;

    }
}

/**
 * Partition details
 * @class
 */
class TopicPartitionDO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Partition ID. specifies the Partition ID.
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Leader running status. 0 means running normally.
         * @type {number || null}
         */
        this.LeaderStatus = null;

        /**
         * ISR quantity
         * @type {number || null}
         */
        this.IsrNum = null;

        /**
         * Number of replicas
         * @type {number || null}
         */
        this.ReplicaNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.LeaderStatus = 'LeaderStatus' in params ? params.LeaderStatus : null;
        this.IsrNum = 'IsrNum' in params ? params.IsrNum : null;
        this.ReplicaNum = 'ReplicaNum' in params ? params.ReplicaNum : null;

    }
}

/**
 * Return for topic creation
 * @class
 */
class CreateTopicResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic ID
         * @type {string || null}
         */
        this.TopicId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicId = 'TopicId' in params ? params.TopicId : null;

    }
}

/**
 * Returned task status
 * @class
 */
class TaskStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task status. `0` (Successful), `1` (Failed), `2` ( Running)
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Output information.
         * @type {string || null}
         */
        this.Output = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Output = 'Output' in params ? params.Output : null;

    }
}

/**
 * Topic parameters that can be modified in batches
 * @class
 */
class BatchModifyTopicInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * The number of partitions.
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Number of replicas.
         * @type {number || null}
         */
        this.ReplicaNum = null;

        /**
         * Message deletion policy. Valid values: `delete`, `compact`.
         * @type {string || null}
         */
        this.CleanUpPolicy = null;

        /**
         * The minimum number of replicas specified by `min.insync.replicas` when the producer sets `request.required.acks` to `-1`.
         * @type {number || null}
         */
        this.MinInsyncReplicas = null;

        /**
         * Whether to allow a non-ISR replica to be the leader.
         * @type {boolean || null}
         */
        this.UncleanLeaderElectionEnable = null;

        /**
         * Message retention period in topic dimension in milliseconds. Value range: 1 minute to 90 days.
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Specifies the message retention size in the topic dimension in bytes. value range: 1 GB to 1024 GB.
         * @type {number || null}
         */
        this.RetentionBytes = null;

        /**
         * Duration of Segment shard scrolling in milliseconds. value range: 1 day to 90 days.
         * @type {number || null}
         */
        this.SegmentMs = null;

        /**
         * Message size per batch. Value range: 1 KB - 12 MB.
         * @type {number || null}
         */
        this.MaxMessageBytes = null;

        /**
         * Specifies the time type for message storage: CreateTime/LogAppendTime.
         * @type {string || null}
         */
        this.LogMsgTimestampType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.ReplicaNum = 'ReplicaNum' in params ? params.ReplicaNum : null;
        this.CleanUpPolicy = 'CleanUpPolicy' in params ? params.CleanUpPolicy : null;
        this.MinInsyncReplicas = 'MinInsyncReplicas' in params ? params.MinInsyncReplicas : null;
        this.UncleanLeaderElectionEnable = 'UncleanLeaderElectionEnable' in params ? params.UncleanLeaderElectionEnable : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.RetentionBytes = 'RetentionBytes' in params ? params.RetentionBytes : null;
        this.SegmentMs = 'SegmentMs' in params ? params.SegmentMs : null;
        this.MaxMessageBytes = 'MaxMessageBytes' in params ? params.MaxMessageBytes : null;
        this.LogMsgTimestampType = 'LogMsgTimestampType' in params ? params.LogMsgTimestampType : null;

    }
}

/**
 * DescribeRoute response structure.
 * @class
 */
class DescribeRouteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result set of route information
         * @type {RouteResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new RouteResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDatahubTopic response structure.
 * @class
 */
class ModifyDatahubTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result set
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDatahubTopics request structure.
 * @class
 */
class DescribeDatahubTopicsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Search term.
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Query offset, which defaults to `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of results to be returned in this request. Default value: `50`. Maximum value: `50`.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Specifies whether to query the topic list from the connection.
         * @type {boolean || null}
         */
        this.QueryFromConnectResource = null;

        /**
         * Connection ID.
         * @type {string || null}
         */
        this.ConnectResourceId = null;

        /**
         * topic resource expression.
         * @type {string || null}
         */
        this.TopicRegularExpression = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.QueryFromConnectResource = 'QueryFromConnectResource' in params ? params.QueryFromConnectResource : null;
        this.ConnectResourceId = 'ConnectResourceId' in params ? params.ConnectResourceId : null;
        this.TopicRegularExpression = 'TopicRegularExpression' in params ? params.TopicRegularExpression : null;

    }
}

/**
 * DescribeTypeInstances request structure.
 * @class
 */
class DescribeTypeInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * (Filter condition) filter by instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * (Filter condition) filter by instance name. fuzzy query is supported.
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Instance status (filter condition). valid values: 0: creating, 1: running, 2: deleting. default return: all.
         * @type {Array.<number> || null}
         */
        this.Status = null;

        /**
         * Offset. default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. default: 10. maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Matches the Tag key.
         * @type {string || null}
         */
        this.TagKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.TagKey = 'TagKey' in params ? params.TagKey : null;

    }
}

/**
 * Response parameters for instance price query
 * @class
 */
class InquiryPrice extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price unit.
         * @type {number || null}
         */
        this.UnitPrice = null;

        /**
         * Discount unit price.
         * @type {number || null}
         */
        this.UnitPriceDiscount = null;

        /**
         * Total original price.
         * @type {number || null}
         */
        this.OriginalPrice = null;

        /**
         * Total discount price.
         * @type {number || null}
         */
        this.DiscountPrice = null;

        /**
         * Discount (unit: %).
         * @type {number || null}
         */
        this.Discount = null;

        /**
         * Number of products
         * @type {number || null}
         */
        this.GoodsNum = null;

        /**
         * Specifies the payment currency.
         * @type {string || null}
         */
        this.Currency = null;

        /**
         * Dedicated disk response parameter
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Purchase duration.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Specifies the purchase duration unit ("m" for monthly, "h" for hourly).
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Purchase quantity
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Value = null;

        /**
         * Prices of different purchased items
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InquiryDetailPrice || null}
         */
        this.DetailPrices = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UnitPrice = 'UnitPrice' in params ? params.UnitPrice : null;
        this.UnitPriceDiscount = 'UnitPriceDiscount' in params ? params.UnitPriceDiscount : null;
        this.OriginalPrice = 'OriginalPrice' in params ? params.OriginalPrice : null;
        this.DiscountPrice = 'DiscountPrice' in params ? params.DiscountPrice : null;
        this.Discount = 'Discount' in params ? params.Discount : null;
        this.GoodsNum = 'GoodsNum' in params ? params.GoodsNum : null;
        this.Currency = 'Currency' in params ? params.Currency : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.Value = 'Value' in params ? params.Value : null;

        if (params.DetailPrices) {
            let obj = new InquiryDetailPrice();
            obj.deserialize(params.DetailPrices)
            this.DetailPrices = obj;
        }

    }
}

/**
 * ModifyRoutineMaintenanceTask response structure.
 * @class
 */
class ModifyRoutineMaintenanceTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTopicDetail request structure.
 * @class
 */
class DescribeTopicDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * (Filter) filter by `topicName`. Fuzzy search is supported
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Offset. If this parameter is left empty, 0 will be used by default
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. default: 20. value must be above 0.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Name of the preset ACL rule.
         * @type {string || null}
         */
        this.AclRuleName = null;

        /**
         * Sorts based on specific attributes (currently supports PartitionNum/CreateTime). default value: CreateTime.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * 0 - sequential, 1 - reverse order. default value: 0.
         * @type {number || null}
         */
        this.OrderType = null;

        /**
         * Currently supports ReplicaNum (number of replicas) filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.AclRuleName = 'AclRuleName' in params ? params.AclRuleName : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.OrderType = 'OrderType' in params ? params.OrderType : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeGroupOffsets response structure.
 * @class
 */
class DescribeGroupOffsetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {GroupOffsetResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new GroupOffsetResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SendMessage request structure.
 * @class
 */
class SendMessageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Datahub access ID.
         * @type {string || null}
         */
        this.DataHubId = null;

        /**
         * Content of the message that has been sent. Up to 500 messages can be sent in a single request.
         * @type {Array.<BatchContent> || null}
         */
        this.Message = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataHubId = 'DataHubId' in params ? params.DataHubId : null;

        if (params.Message) {
            this.Message = new Array();
            for (let z in params.Message) {
                let obj = new BatchContent();
                obj.deserialize(params.Message[z]);
                this.Message.push(obj);
            }
        }

    }
}

/**
 * Message record
 * @class
 */
class ConsumerRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Partition ID
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Message key
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Message value
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Message timestamp.
         * @type {number || null}
         */
        this.Timestamp = null;

        /**
         * Message headers
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Headers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.Partition = 'Partition' in params ? params.Partition : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.Headers = 'Headers' in params ? params.Headers : null;

    }
}

/**
 * ModifyGroupOffsets request structure.
 * @class
 */
class ModifyGroupOffsetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ckafka cluster instance Id. obtain through the API [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name. obtain through the API [DescribeConsumerGroup](https://www.tencentcloud.comom/document/product/597/40841?from_cn_redirect=1).
         * @type {string || null}
         */
        this.Group = null;

        /**
         * Reset offset strategy. parameter meaning: 0. align with the shift-by parameter, move the offset forward or backward by shift entries. 1. alignment reference (by-duration, to-datetime, to-earliest, to-latest), move the offset to the specified timestamp position. 2. alignment reference (to-offset), move the offset to the specified offset position.
         * @type {number || null}
         */
        this.Strategy = null;

        /**
         * Specifies the topic name list that needs to reset.
         * @type {Array.<string> || null}
         */
        this.Topics = null;

        /**
         * When `strategy` is 0, this field is required. If it is above zero, the offset will be shifted backward by the value of the `shift`. If it is below zero, the offset will be shifted forward by the value of the `shift`. After a correct reset, the new offset should be (old_offset + shift). Note that if the new offset is smaller than the `earliest` parameter of the partition, it will be set to `earliest`, and if it is greater than the `latest` parameter of the partition, it will be set to `latest`
         * @type {number || null}
         */
        this.Shift = null;

        /**
         * In milliseconds. when strategy is 1, must include this field. among them, -2 means reset offset to the start position, -1 means reset to the latest position (equivalent to clearing), other values represent the specified time. obtain the offset at the specified time in the topic and reset. notably, if no message exists at the specified time, get the last offset.
         * @type {number || null}
         */
        this.ShiftTimestamp = null;

        /**
         * Position of the offset that needs to be reset. When `strategy` is 2, this field is required
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * List of partitions that need to be reset. If the topics parameter is not specified, reset partitions in the corresponding partition list of all topics. If the topics parameter is specified, reset partitions of the corresponding partition list of the specified topic list.
         * @type {Array.<number> || null}
         */
        this.Partitions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Group = 'Group' in params ? params.Group : null;
        this.Strategy = 'Strategy' in params ? params.Strategy : null;
        this.Topics = 'Topics' in params ? params.Topics : null;
        this.Shift = 'Shift' in params ? params.Shift : null;
        this.ShiftTimestamp = 'ShiftTimestamp' in params ? params.ShiftTimestamp : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Partitions = 'Partitions' in params ? params.Partitions : null;

    }
}

/**
 * BatchModifyTopicAttributes request structure.
 * @class
 */
class BatchModifyTopicAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic attribute list (a maximum of 10 per batch), which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {Array.<BatchModifyTopicInfo> || null}
         */
        this.Topic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Topic) {
            this.Topic = new Array();
            for (let z in params.Topic) {
                let obj = new BatchModifyTopicInfo();
                obj.deserialize(params.Topic[z]);
                this.Topic.push(obj);
            }
        }

    }
}

/**
 * DeleteGroup response structure.
 * @class
 */
class DeleteGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results.
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateTopicIpWhiteList request structure.
 * @class
 */
class CreateTopicIpWhiteListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic name, which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Allowlist list. maximum value is 512. upper limit for incoming ips is 512.
         * @type {Array.<string> || null}
         */
        this.IpWhiteList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.IpWhiteList = 'IpWhiteList' in params ? params.IpWhiteList : null;

    }
}

/**
 * Route entity object
 * @class
 */
class Route extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance connection method
0: PLAINTEXT (plaintext method, which does not carry user information and is supported for legacy versions and Community Edition)
1: SASL_PLAINTEXT (plaintext method, which authenticates the login through SASL before data start and is supported only for Community Edition)
2: SSL (SSL-encrypted communication, which does not carry user information and is supported for legacy versions and Community Edition)
3: SASL_SSL (SSL-encrypted communication, which authenticates the login through SASL before data start and is supported only for Community Edition)
         * @type {number || null}
         */
        this.AccessType = null;

        /**
         * Route ID
         * @type {number || null}
         */
        this.RouteId = null;

        /**
         * Specifies the network type of the route (3: vpc routing; 7: internal support route; 1: public network route).
         * @type {number || null}
         */
        this.VipType = null;

        /**
         * Virtual IP list
         * @type {Array.<VipEntity> || null}
         */
        this.VipList = null;

        /**
         * Domain name
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain name port
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DomainPort = null;

        /**
         * Timestamp.
         * @type {string || null}
         */
        this.DeleteTimestamp = null;

        /**
         * Specifies the subnet Id.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Subnet = null;

        /**
         * Virtual IP list (1:1 broker node).
         * @type {Array.<VipEntity> || null}
         */
        this.BrokerVipList = null;

        /**
         * VPC Id. specifies the Id of the vpc.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Remarks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Route status. 1: creating, 2: creation succeeded, 3: creation failed, 4: deleting, 6: deletion failed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AccessType = 'AccessType' in params ? params.AccessType : null;
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.VipType = 'VipType' in params ? params.VipType : null;

        if (params.VipList) {
            this.VipList = new Array();
            for (let z in params.VipList) {
                let obj = new VipEntity();
                obj.deserialize(params.VipList[z]);
                this.VipList.push(obj);
            }
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainPort = 'DomainPort' in params ? params.DomainPort : null;
        this.DeleteTimestamp = 'DeleteTimestamp' in params ? params.DeleteTimestamp : null;
        this.Subnet = 'Subnet' in params ? params.Subnet : null;

        if (params.BrokerVipList) {
            this.BrokerVipList = new Array();
            for (let z in params.BrokerVipList) {
                let obj = new VipEntity();
                obj.deserialize(params.BrokerVipList[z]);
                this.BrokerVipList.push(obj);
            }
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * FetchMessageListByTimestamp response structure.
 * @class
 */
class FetchMessageListByTimestampResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned results. note that the list does not return specific message content (key, value). if necessary, please use the FetchMessageByOffset API to query specific message content.
         * @type {Array.<ConsumerRecord> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new ConsumerRecord();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteInstancePost response structure.
 * @class
 */
class DeleteInstancePostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result.
         * @type {InstanceDeleteResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new InstanceDeleteResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ACL object entity
 * @class
 */
class Acl extends  AbstractModel {
    constructor(){
        super();

        /**
         * ACL resource type. 0: UNKNOWN, 1: ANY, 2: TOPIC, 3: GROUP, 4: CLUSTER, 5: TRANSACTIONAL_ID. Currently, only `TOPIC` is available,
         * @type {number || null}
         */
        this.ResourceType = null;

        /**
         * Resource name, which is related to `resourceType`. For example, if `resourceType` is `TOPIC`, this field indicates the topic name; if `resourceType` is `GROUP`, this field indicates the group name
         * @type {string || null}
         */
        this.ResourceName = null;

        /**
         * List of users, defaults to User:*, means any User is accessible in the entire region. the current User can only be the User in the list of users.
         * @type {string || null}
         */
        this.Principal = null;

        /**
         * Defaults to *, indicating any host is accessible in the entire region. currently, ckafka does not support * as the host, however, the following open-source kafka productization will directly support it.
         * @type {string || null}
         */
        this.Host = null;

        /**
         * ACL operation mode. 0: UNKNOWN, 1: ANY, 2: ALL, 3: READ, 4: WRITE, 5: CREATE, 6: DELETE, 7: ALTER, 8: DESCRIBE, 9: CLUSTER_ACTION, 10: DESCRIBE_CONFIGS, 11: ALTER_CONFIGS, 12: IDEMPOTEN_WRITE
         * @type {number || null}
         */
        this.Operation = null;

        /**
         * Permission type. 0: UNKNOWN, 1: ANY, 2: DENY, 3: ALLOW
         * @type {number || null}
         */
        this.PermissionType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceName = 'ResourceName' in params ? params.ResourceName : null;
        this.Principal = 'Principal' in params ? params.Principal : null;
        this.Host = 'Host' in params ? params.Host : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.PermissionType = 'PermissionType' in params ? params.PermissionType : null;

    }
}

/**
 * Information returned for topic message retention time configuration
 * @class
 */
class TopicRetentionTimeConfigRsp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Expected value, the message retention period (in minutes) set by user configuration.
         * @type {number || null}
         */
        this.Expect = null;

        /**
         * Current value, which is the current effective value (may contain dynamic adjustment in minutes).
         * @type {number || null}
         */
        this.Current = null;

        /**
         * Last modified time.
         * @type {number || null}
         */
        this.ModTimeStamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Expect = 'Expect' in params ? params.Expect : null;
        this.Current = 'Current' in params ? params.Current : null;
        this.ModTimeStamp = 'ModTimeStamp' in params ? params.ModTimeStamp : null;

    }
}

/**
 * ModifyDatahubTopic request structure.
 * @class
 */
class ModifyDatahubTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Elastic topic name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Message retention period in ms. The current minimum value is 60,000 ms.
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Topic remarks, which are a string of up to 64 characters. It can contain letters, digits, and hyphens (-) and must start with a letter.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Tag list
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.Note = 'Note' in params ? params.Note : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * ModifyTopicAttributes request structure.
 * @class
 */
class ModifyTopicAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic remarks string of up to 64 characters, which must begin with a letter and can contain letters, digits, and dashes (`-`).
         * @type {string || null}
         */
        this.Note = null;

        /**
         * IP allowlist switch. 1: enabled, 0: disabled.
         * @type {number || null}
         */
        this.EnableWhiteList = null;

        /**
         * Default value: 1.
         * @type {number || null}
         */
        this.MinInsyncReplicas = null;

        /**
         * 0: false, 1: true. Default value: 0.
         * @type {number || null}
         */
        this.UncleanLeaderElectionEnable = null;

        /**
         * Message retention period in ms. The current minimum value is 60,000 ms.
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Max message size in bytes. Max value: 8,388,608 bytes (8 MB).
         * @type {number || null}
         */
        this.MaxMessageBytes = null;

        /**
         * Duration of Segment shard scrolling in milliseconds. current min value is 86400000 ms.
         * @type {number || null}
         */
        this.SegmentMs = null;

        /**
         * Message deletion policy. Valid values: delete, compact
         * @type {string || null}
         */
        this.CleanUpPolicy = null;

        /**
         * IP allowlist, which is required if the value of `enableWhileList` is 1.
         * @type {Array.<string> || null}
         */
        this.IpWhiteList = null;

        /**
         * Preset ACL rule. `1`: enable, `0`: disable. Default value: `0`.
         * @type {number || null}
         */
        this.EnableAclRule = null;

        /**
         * ACL rule name.
         * @type {string || null}
         */
        this.AclRuleName = null;

        /**
         * Message retention file size in bytes, which is an optional parameter. Default value: -1. Currently, the min value that can be entered is 1,048,576 B.
         * @type {number || null}
         */
        this.RetentionBytes = null;

        /**
         * Tag list.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Production traffic throttling in MB/s. set to -1 to disable throttling.
         * @type {number || null}
         */
        this.QuotaProducerByteRate = null;

        /**
         * Consumption traffic throttling in MB/s. set to -1 for unlimited consumption.
         * @type {number || null}
         */
        this.QuotaConsumerByteRate = null;

        /**
         * Number of topic replicas. valid values: 1, 3.
         * @type {number || null}
         */
        this.ReplicaNum = null;

        /**
         * Specifies the time type for message saving: CreateTime/LogAppendTime.
         * @type {string || null}
         */
        this.LogMsgTimestampType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.EnableWhiteList = 'EnableWhiteList' in params ? params.EnableWhiteList : null;
        this.MinInsyncReplicas = 'MinInsyncReplicas' in params ? params.MinInsyncReplicas : null;
        this.UncleanLeaderElectionEnable = 'UncleanLeaderElectionEnable' in params ? params.UncleanLeaderElectionEnable : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.MaxMessageBytes = 'MaxMessageBytes' in params ? params.MaxMessageBytes : null;
        this.SegmentMs = 'SegmentMs' in params ? params.SegmentMs : null;
        this.CleanUpPolicy = 'CleanUpPolicy' in params ? params.CleanUpPolicy : null;
        this.IpWhiteList = 'IpWhiteList' in params ? params.IpWhiteList : null;
        this.EnableAclRule = 'EnableAclRule' in params ? params.EnableAclRule : null;
        this.AclRuleName = 'AclRuleName' in params ? params.AclRuleName : null;
        this.RetentionBytes = 'RetentionBytes' in params ? params.RetentionBytes : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.QuotaProducerByteRate = 'QuotaProducerByteRate' in params ? params.QuotaProducerByteRate : null;
        this.QuotaConsumerByteRate = 'QuotaConsumerByteRate' in params ? params.QuotaConsumerByteRate : null;
        this.ReplicaNum = 'ReplicaNum' in params ? params.ReplicaNum : null;
        this.LogMsgTimestampType = 'LogMsgTimestampType' in params ? params.LogMsgTimestampType : null;

    }
}

/**
 * CreateInstancePre request structure.
 * @class
 */
class CreateInstancePreRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the ckafka cluster instance Name, an arbitrary string with length no more than 128 characters.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Availability zone. when purchasing a multi-availability zone instance, this parameter specifies the primary az. [view availability zones](https://www.tencentcloud.comom/document/product/597/55246?from_cn_redirect=1).
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Prepaid purchase duration, such as "1m", exactly one month. value ranges from 1m to 36m.
         * @type {string || null}
         */
        this.Period = null;

        /**
         * Specifies the standard edition instance specification for the international site. currently only the international site standard edition uses the current field to distinguish specifications, while the domestic site standard edition distinguishes specifications by peak bandwidth. fill in 1 for all instances except the international site standard edition. for international site standard edition instances: [entry-level (general)] fill 1; [standard type (standard)] fill 2; [advanced] fill 3; [capacity type (capacity)] fill 4; [advanced type 1 (specialized-1)] fill 5; [advanced type 2 (specialized-2)] fill 6; [advanced type 3 (specialized-3)] fill 7; [advanced type 4 (specialized-4)] fill 8.
         * @type {number || null}
         */
        this.InstanceType = null;

        /**
         * VPC Id.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Optional. maximum retention time of instance logs, in minutes. default value: 1440 (1 day). value range: 1 minute to 90 days.
         * @type {number || null}
         */
        this.MsgRetentionTime = null;

        /**
         * Specifies the cluster Id when creating an instance.
         * @type {number || null}
         */
        this.ClusterId = null;

        /**
         * Auto-Renewal tag for prepaid services. valid values: 0 (default state, not set by the user, initial status), 1 (auto-renew), 2 (explicitly no auto-renew, set by the user).
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Specifies the CKafka version number. valid values: 2.4.1, 2.4.2, 2.8.1, 3.2.3. default value 2.4.1. 2.4.1 and 2.4.2 belong to the same version. any can be passed.
         * @type {string || null}
         */
        this.KafkaVersion = null;

        /**
         * Specifies the instance type. valid values: standard (default), profession, premium.
         * @type {string || null}
         */
        this.SpecificationsType = null;

        /**
         * Disk size. if it does not match the console specification ratio, the creation cannot succeed. default value is 500. step length is set to 100. can be accessed through the following link: https://www.tencentcloud.comom/document/product/597/122562.?from_cn_redirect=1
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Instance bandwidth. default value: 40 MB/s. minimum value: 20 MB/s. maximum value for advanced edition: 360 MB/s. maximum value for pro edition: 100000 MB/s. standard version fixed bandwidth specifications: 40 MB/s, 100 MB/s, 150 MB/s. view billing specifications through the following link: https://www.tencentcloud.comom/document/product/597/11745.?from_cn_redirect=1
         * @type {number || null}
         */
        this.BandWidth = null;

        /**
         * Partition size. if it does not match the console specification ratio, creation will fail. default value is 800, step length is 100. billing specifications can be viewed through the following link: https://www.tencentcloud.comom/document/product/597/122563.?from_cn_redirect=1
         * @type {number || null}
         */
        this.Partition = null;

        /**
         * Tag.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Specifies the disk type for a pro/advanced edition instance. you do not need to fill it in for a standard edition instance. valid values: "CLOUD_SSD" for SSD CLOUD disk; "CLOUD_BASIC" for high-performance CLOUD block storage. default value: "CLOUD_BASIC".
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Specifies whether to create a cross-az instance. when the current parameter is true, zoneIds is required.
         * @type {boolean || null}
         */
        this.MultiZoneFlag = null;

        /**
         * Availability zone list. required item when purchasing a multi-availability zone instance.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * Public network bandwidth size, in Mbps. the default is no free 3 Mbps bandwidth. for example, for a total of 3 Mbps public network bandwidth, pass 0 here; for a total of 6 Mbps public network bandwidth, pass 3 here. default value is 0. ensure the input parameter is a multiple of 3.
         * @type {number || null}
         */
        this.PublicNetworkMonthly = null;

        /**
         * Number of instances to purchase. optional. default value is 1. when you input this parameter, it enables the creation of multiple instances with case-sensitive suffixes added to instanceName.
         * @type {number || null}
         */
        this.InstanceNum = null;

        /**
         * Whether to automatically select a voucher. valid values: 1 (yes), 0 (no). default is 0.
         * @type {number || null}
         */
        this.AutoVoucher = null;

        /**
         * Elastic bandwidth switch. specifies whether to enable elastic bandwidth. valid values: 0 (not enabled, default), 1 (enabled).
         * @type {number || null}
         */
        this.ElasticBandwidthSwitch = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.Period = 'Period' in params ? params.Period : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.MsgRetentionTime = 'MsgRetentionTime' in params ? params.MsgRetentionTime : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.KafkaVersion = 'KafkaVersion' in params ? params.KafkaVersion : null;
        this.SpecificationsType = 'SpecificationsType' in params ? params.SpecificationsType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.BandWidth = 'BandWidth' in params ? params.BandWidth : null;
        this.Partition = 'Partition' in params ? params.Partition : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.MultiZoneFlag = 'MultiZoneFlag' in params ? params.MultiZoneFlag : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.PublicNetworkMonthly = 'PublicNetworkMonthly' in params ? params.PublicNetworkMonthly : null;
        this.InstanceNum = 'InstanceNum' in params ? params.InstanceNum : null;
        this.AutoVoucher = 'AutoVoucher' in params ? params.AutoVoucher : null;
        this.ElasticBandwidthSwitch = 'ElasticBandwidthSwitch' in params ? params.ElasticBandwidthSwitch : null;

    }
}

/**
 * DeleteTopicIpWhiteList request structure.
 * @class
 */
class DeleteTopicIpWhiteListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id, which can be obtained through the [DescribeInstances](https://www.tencentcloud.comom/document/product/597/40835?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the topic name, which can be obtained through the [DescribeTopic](https://www.tencentcloud.comom/document/product/597/40847?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * IP allowlist list
         * @type {Array.<string> || null}
         */
        this.IpWhiteList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.IpWhiteList = 'IpWhiteList' in params ? params.IpWhiteList : null;

    }
}

/**
 * DeleteTopic response structure.
 * @class
 */
class DeleteTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned result set
         * @type {JgwOperateResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new JgwOperateResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DataHub topic details
 * @class
 */
class DescribeDatahubTopicResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Topic ID
         * @type {string || null}
         */
        this.TopicId = null;

        /**
         * The number of partitions
         * @type {number || null}
         */
        this.PartitionNum = null;

        /**
         * Expiration time in milliseconds.
         * @type {number || null}
         */
        this.RetentionMs = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Username
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password
         * @type {string || null}
         */
        this.Password = null;

        /**
         * Status (`1`: In use; `2`: Deleting)
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Specifies the service routing address.
         * @type {string || null}
         */
        this.Address = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.TopicId = 'TopicId' in params ? params.TopicId : null;
        this.PartitionNum = 'PartitionNum' in params ? params.PartitionNum : null;
        this.RetentionMs = 'RetentionMs' in params ? params.RetentionMs : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.Password = 'Password' in params ? params.Password : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Address = 'Address' in params ? params.Address : null;

    }
}

/**
 * DescribeTaskStatus request structure.
 * @class
 */
class DescribeTaskStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Flow ID.
         * @type {number || null}
         */
        this.FlowId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;

    }
}

/**
 * DescribeUser request structure.
 * @class
 */
class DescribeUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Filter by name
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returns.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DataHub topic list
 * @class
 */
class DescribeDatahubTopicsResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Topic list.
         * @type {Array.<DatahubTopicDTO> || null}
         */
        this.TopicList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.TopicList) {
            this.TopicList = new Array();
            for (let z in params.TopicList) {
                let obj = new DatahubTopicDTO();
                obj.deserialize(params.TopicList[z]);
                this.TopicList.push(obj);
            }
        }

    }
}

/**
 * DescribeTopicSyncReplica request structure.
 * @class
 */
class DescribeTopicSyncReplicaRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Offset. If this parameter is left empty, 0 will be used by default.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. default value: 20. must be greater than 0.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filters unsynced replicas only
         * @type {boolean || null}
         */
        this.OutOfSyncReplicaOnly = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OutOfSyncReplicaOnly = 'OutOfSyncReplicaOnly' in params ? params.OutOfSyncReplicaOnly : null;

    }
}

/**
 * Instance details
 * @class
 */
class InstanceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * CKafka cluster instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance VIP information
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Instance port information
         * @type {string || null}
         */
        this.Vport = null;

        /**
         * Virtual IP list
         * @type {Array.<VipEntity> || null}
         */
        this.VipList = null;

        /**
         * Instance status. 0: creating, 1: running, 2: deleting, 3: deleted, 5: isolated, 7: upgrading, -1: creation failed.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Instance bandwidth in Mbps
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Specifies the ckafka cluster instance disk size in gb.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * AZ ID
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * vpcId. If this parameter is empty, it means the basic network
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Whether to renew the instance automatically, which is an int-type enumerated value. 1: yes, 2: no
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Instance status. An int-type value will be returned. `0`: Healthy, `1`: Alarmed, `2`: Exceptional
         * @type {number || null}
         */
        this.Healthy = null;

        /**
         * Instance status information
         * @type {string || null}
         */
        this.HealthyMessage = null;

        /**
         * Instance creation time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Instance expiration time
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Whether it is an internal customer. 1: yes
         * @type {number || null}
         */
        this.IsInternal = null;

        /**
         * Number of topics
         * @type {number || null}
         */
        this.TopicNum = null;

        /**
         * Tag
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * kafka version information.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Cross-Availability zone.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * ckafka sales type.
         * @type {number || null}
         */
        this.Cvm = null;

        /**
         * Specifies the cluster instance type of ckafka.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Specifies the ckafka cluster instance disk type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Maximum number of topics for current specifications.
         * @type {number || null}
         */
        this.MaxTopicNumber = null;

        /**
         * Maximum number of partitions for current specifications.
         * @type {number || null}
         */
        this.MaxPartitionNumber = null;

        /**
         * Scheduled configuration upgrade time.
         * @type {string || null}
         */
        this.RebalanceTime = null;

        /**
         * Specifies the number of partitions in the current instance.
         * @type {number || null}
         */
        this.PartitionNumber = null;

        /**
         * Specifies the public network bandwidth type of the ckafka cluster instance.
         * @type {string || null}
         */
        this.PublicNetworkChargeType = null;

        /**
         * Public network bandwidth. minimum 3 Mbps. maximum 999 Mbps. only the pro edition supports filling in.
         * @type {number || null}
         */
        this.PublicNetwork = null;

        /**
         * Specifies the underlying cluster type of the ckafka cluster instance.
         * @type {string || null}
         */
        this.ClusterType = null;

        /**
         * Instance feature list.
         * @type {Array.<string> || null}
         */
        this.Features = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;

        if (params.VipList) {
            this.VipList = new Array();
            for (let z in params.VipList) {
                let obj = new VipEntity();
                obj.deserialize(params.VipList[z]);
                this.VipList.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.Healthy = 'Healthy' in params ? params.Healthy : null;
        this.HealthyMessage = 'HealthyMessage' in params ? params.HealthyMessage : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.IsInternal = 'IsInternal' in params ? params.IsInternal : null;
        this.TopicNum = 'TopicNum' in params ? params.TopicNum : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Version = 'Version' in params ? params.Version : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.Cvm = 'Cvm' in params ? params.Cvm : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.MaxTopicNumber = 'MaxTopicNumber' in params ? params.MaxTopicNumber : null;
        this.MaxPartitionNumber = 'MaxPartitionNumber' in params ? params.MaxPartitionNumber : null;
        this.RebalanceTime = 'RebalanceTime' in params ? params.RebalanceTime : null;
        this.PartitionNumber = 'PartitionNumber' in params ? params.PartitionNumber : null;
        this.PublicNetworkChargeType = 'PublicNetworkChargeType' in params ? params.PublicNetworkChargeType : null;
        this.PublicNetwork = 'PublicNetwork' in params ? params.PublicNetwork : null;
        this.ClusterType = 'ClusterType' in params ? params.ClusterType : null;
        this.Features = 'Features' in params ? params.Features : null;

    }
}

/**
 * Traffic throttling policy in instance/topic dimension
 * @class
 */
class InstanceQuotaConfigResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Production throttling in MB/sec.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QuotaProducerByteRate = null;

        /**
         * Consumption throttling in MB/sec.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QuotaConsumerByteRate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.QuotaProducerByteRate = 'QuotaProducerByteRate' in params ? params.QuotaProducerByteRate : null;
        this.QuotaConsumerByteRate = 'QuotaConsumerByteRate' in params ? params.QuotaConsumerByteRate : null;

    }
}

/**
 * DescribeTopicDetail response structure.
 * @class
 */
class DescribeTopicDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned entity of topic details
         * @type {TopicDetailResponse || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            let obj = new TopicDetailResponse();
            obj.deserialize(params.Result)
            this.Result = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Subscribed message entity
 * @class
 */
class SubscribedInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subscribed topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Specifies the subscription partition.
         * @type {Array.<number> || null}
         */
        this.Partition = null;

        /**
         * Specifies the partition offset information.
         * @type {Array.<PartitionOffset> || null}
         */
        this.PartitionOffset = null;

        /**
         * Subscribed topic ID.
         * @type {string || null}
         */
        this.TopicId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Partition = 'Partition' in params ? params.Partition : null;

        if (params.PartitionOffset) {
            this.PartitionOffset = new Array();
            for (let z in params.PartitionOffset) {
                let obj = new PartitionOffset();
                obj.deserialize(params.PartitionOffset[z]);
                this.PartitionOffset.push(obj);
            }
        }
        this.TopicId = 'TopicId' in params ? params.TopicId : null;

    }
}

/**
 * Results returned by the `AclRuleList` API
 * @class
 */
class AclRuleResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of data entries
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * AclRule list.
         * @type {Array.<AclRule> || null}
         */
        this.AclRuleList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AclRuleList) {
            this.AclRuleList = new Array();
            for (let z in params.AclRuleList) {
                let obj = new AclRule();
                obj.deserialize(params.AclRuleList[z]);
                this.AclRuleList.push(obj);
            }
        }

    }
}

/**
 * Security group routing information returned results.
 * @class
 */
class SecurityGroupRouteResp extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of eligible security group routes.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Eligible security group route information list.
         * @type {Array.<SecurityGroupRoute> || null}
         */
        this.SecurityGroupRoutes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SecurityGroupRoutes) {
            this.SecurityGroupRoutes = new Array();
            for (let z in params.SecurityGroupRoutes) {
                let obj = new SecurityGroupRoute();
                obj.deserialize(params.SecurityGroupRoutes[z]);
                this.SecurityGroupRoutes.push(obj);
            }
        }

    }
}

/**
 * Message price entity
 * @class
 */
class Price extends  AbstractModel {
    constructor(){
        super();

        /**
         * Discounted price
         * @type {number || null}
         */
        this.RealTotalCost = null;

        /**
         * Original price
         * @type {number || null}
         */
        this.TotalCost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RealTotalCost = 'RealTotalCost' in params ? params.RealTotalCost : null;
        this.TotalCost = 'TotalCost' in params ? params.TotalCost : null;

    }
}

/**
 * DescribeCkafkaVersion request structure.
 * @class
 */
class DescribeCkafkaVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ckafka cluster instance Id.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

module.exports = {
    DescribeCkafkaVersionResponse: DescribeCkafkaVersionResponse,
    TopicDetail: TopicDetail,
    DeleteAclRequest: DeleteAclRequest,
    GroupInfoMember: GroupInfoMember,
    AclRuleInfo: AclRuleInfo,
    BatchCreateAclRequest: BatchCreateAclRequest,
    DeleteUserRequest: DeleteUserRequest,
    PartitionOffset: PartitionOffset,
    DescribeACLRequest: DescribeACLRequest,
    InstanceDeleteResponse: InstanceDeleteResponse,
    BatchModifyTopicResultDTO: BatchModifyTopicResultDTO,
    DescribeTopicAttributesRequest: DescribeTopicAttributesRequest,
    DescribeInstanceAttributesRequest: DescribeInstanceAttributesRequest,
    ConsumerGroup: ConsumerGroup,
    Assignment: Assignment,
    ModifyAclRuleRequest: ModifyAclRuleRequest,
    DescribeAclRuleResponse: DescribeAclRuleResponse,
    DescribeConsumerGroupResponse: DescribeConsumerGroupResponse,
    InquiryDetailPrice: InquiryDetailPrice,
    FetchMessageListByOffsetResponse: FetchMessageListByOffsetResponse,
    InquireCkafkaPriceResp: InquireCkafkaPriceResp,
    CreateRouteRequest: CreateRouteRequest,
    DeleteTopicRequest: DeleteTopicRequest,
    DescribeInstancesResponse: DescribeInstancesResponse,
    FetchMessageByOffsetResponse: FetchMessageByOffsetResponse,
    BatchModifyTopicAttributesResponse: BatchModifyTopicAttributesResponse,
    CreateInstancePreResp: CreateInstancePreResp,
    GroupInfoTopics: GroupInfoTopics,
    InstanceScalingDownRequest: InstanceScalingDownRequest,
    FetchMessageListByOffsetRequest: FetchMessageListByOffsetRequest,
    DescribeSecurityGroupRoutesResponse: DescribeSecurityGroupRoutesResponse,
    UpgradeBrokerVersionRequest: UpgradeBrokerVersionRequest,
    ModifyInstancePreRequest: ModifyInstancePreRequest,
    CreateAclRuleRequest: CreateAclRuleRequest,
    RouteFilter: RouteFilter,
    DescribeInstancesDetailResponse: DescribeInstancesDetailResponse,
    CreateInstancePreData: CreateInstancePreData,
    AclRule: AclRule,
    DescribeAclRuleRequest: DescribeAclRuleRequest,
    InstanceRoute: InstanceRoute,
    DescribeACLResponse: DescribeACLResponse,
    DynamicDiskConfig: DynamicDiskConfig,
    JgwOperateResponse: JgwOperateResponse,
    InquireCkafkaPriceRequest: InquireCkafkaPriceRequest,
    ZoneInfo: ZoneInfo,
    DescribeTopicSubscribeGroupResponse: DescribeTopicSubscribeGroupResponse,
    DescribeCkafkaZoneRequest: DescribeCkafkaZoneRequest,
    SaleInfo: SaleInfo,
    Topic: Topic,
    DescribeTypeInstancesResponse: DescribeTypeInstancesResponse,
    Tag: Tag,
    ModifyAclRuleResponse: ModifyAclRuleResponse,
    BatchModifyGroupOffsetsResponse: BatchModifyGroupOffsetsResponse,
    SecurityGroupRoute: SecurityGroupRoute,
    GroupResponse: GroupResponse,
    FetchMessageListByTimestampRequest: FetchMessageListByTimestampRequest,
    CreateDatahubTopicRequest: CreateDatahubTopicRequest,
    InstanceChargeParam: InstanceChargeParam,
    CreateInstancePostResp: CreateInstancePostResp,
    DescribeDatahubTopicResponse: DescribeDatahubTopicResponse,
    DescribeConsumerGroupRequest: DescribeConsumerGroupRequest,
    DescribeCvmInfoRequest: DescribeCvmInfoRequest,
    CreateConsumerResponse: CreateConsumerResponse,
    CreatePostPaidInstanceRequest: CreatePostPaidInstanceRequest,
    RouteResponse: RouteResponse,
    DescribeGroupResponse: DescribeGroupResponse,
    DeleteAclRuleRequest: DeleteAclRuleRequest,
    ModifyInstanceAttributesConfig: ModifyInstanceAttributesConfig,
    DescribeTaskStatusResponse: DescribeTaskStatusResponse,
    OperateResponseData: OperateResponseData,
    CreateUserResponse: CreateUserResponse,
    DescribeRouteRequest: DescribeRouteRequest,
    CreatePartitionResponse: CreatePartitionResponse,
    TopicAttributesResponse: TopicAttributesResponse,
    TopicSubscribeGroup: TopicSubscribeGroup,
    ClusterInfo: ClusterInfo,
    DeleteGroupRequest: DeleteGroupRequest,
    DeleteInstancePostRequest: DeleteInstancePostRequest,
    DeleteUserResponse: DeleteUserResponse,
    DescribeTopicProduceConnectionRequest: DescribeTopicProduceConnectionRequest,
    CreateAclRequest: CreateAclRequest,
    DescribeTopicSyncReplicaResponse: DescribeTopicSyncReplicaResponse,
    TopicResult: TopicResult,
    DeleteRouteResponse: DeleteRouteResponse,
    Partitions: Partitions,
    DescribeTopicResponse: DescribeTopicResponse,
    ConsumerGroupResponse: ConsumerGroupResponse,
    CreateTopicIpWhiteListResponse: CreateTopicIpWhiteListResponse,
    GroupOffsetTopic: GroupOffsetTopic,
    ModifyGroupOffsetsResponse: ModifyGroupOffsetsResponse,
    DescribeConnectInfoResultDTO: DescribeConnectInfoResultDTO,
    Partition: Partition,
    CreateAclResponse: CreateAclResponse,
    CreateTopicRequest: CreateTopicRequest,
    DeleteAclResponse: DeleteAclResponse,
    DynamicRetentionTime: DynamicRetentionTime,
    DescribeTopicSubscribeGroupRequest: DescribeTopicSubscribeGroupRequest,
    DeleteInstancePreResponse: DeleteInstancePreResponse,
    DatahubTopicResp: DatahubTopicResp,
    FetchMessageByOffsetRequest: FetchMessageByOffsetRequest,
    InquiryPublicNetworkParam: InquiryPublicNetworkParam,
    TopicInSyncReplicaInfo: TopicInSyncReplicaInfo,
    DescribeRegionRequest: DescribeRegionRequest,
    InstanceConfigDO: InstanceConfigDO,
    DeleteAclRuleResponse: DeleteAclRuleResponse,
    UserResponse: UserResponse,
    DescribeCvmInfoResponse: DescribeCvmInfoResponse,
    DescribeGroupInfoResponse: DescribeGroupInfoResponse,
    ModifyTopicAttributesResponse: ModifyTopicAttributesResponse,
    BatchContent: BatchContent,
    DeleteRouteTriggerTimeResponse: DeleteRouteTriggerTimeResponse,
    DescribeUserResponse: DescribeUserResponse,
    DescribeTopicRequest: DescribeTopicRequest,
    DealInstanceDTO: DealInstanceDTO,
    CreatePartitionRequest: CreatePartitionRequest,
    Group: Group,
    GroupInfoResponse: GroupInfoResponse,
    GroupOffsetResponse: GroupOffsetResponse,
    AclResponse: AclResponse,
    ZoneResponse: ZoneResponse,
    ModifyRoutineMaintenanceTaskRequest: ModifyRoutineMaintenanceTaskRequest,
    Instance: Instance,
    DescribeInstanceAttributesResponse: DescribeInstanceAttributesResponse,
    ModifyPasswordResponse: ModifyPasswordResponse,
    TopicDetailResponse: TopicDetailResponse,
    DeleteInstancePreRequest: DeleteInstancePreRequest,
    DescribeDatahubTopicRequest: DescribeDatahubTopicRequest,
    Config: Config,
    ModifyPasswordRequest: ModifyPasswordRequest,
    ModifyInstanceAttributesRequest: ModifyInstanceAttributesRequest,
    DescribeRegionResponse: DescribeRegionResponse,
    CreateTopicResponse: CreateTopicResponse,
    VipEntity: VipEntity,
    DescribeTopicProduceConnectionResponse: DescribeTopicProduceConnectionResponse,
    ModifyInstanceAttributesResponse: ModifyInstanceAttributesResponse,
    ConsumerGroupTopic: ConsumerGroupTopic,
    User: User,
    CreateAclRuleResponse: CreateAclRuleResponse,
    DescribeTopicAttributesResponse: DescribeTopicAttributesResponse,
    UpgradeBrokerVersionResponse: UpgradeBrokerVersionResponse,
    CreateInstancePostData: CreateInstancePostData,
    DescribeGroupOffsetsRequest: DescribeGroupOffsetsRequest,
    DeleteRouteTriggerTimeRequest: DeleteRouteTriggerTimeRequest,
    GroupOffsetPartition: GroupOffsetPartition,
    DescribeInstancesRequest: DescribeInstancesRequest,
    InstanceAttributesResponse: InstanceAttributesResponse,
    DescribeDatahubTopicsResponse: DescribeDatahubTopicsResponse,
    DescribeGroupRequest: DescribeGroupRequest,
    Filter: Filter,
    BatchCreateAclResponse: BatchCreateAclResponse,
    DescribeSecurityGroupRoutesRequest: DescribeSecurityGroupRoutesRequest,
    ModifyInstancePreResponse: ModifyInstancePreResponse,
    CreateUserRequest: CreateUserRequest,
    InstanceDetailResponse: InstanceDetailResponse,
    DeleteRouteRequest: DeleteRouteRequest,
    DeleteTopicIpWhiteListResponse: DeleteTopicIpWhiteListResponse,
    CreateInstancePreResponse: CreateInstancePreResponse,
    CvmAndIpInfo: CvmAndIpInfo,
    DescribeInstancesDetailRequest: DescribeInstancesDetailRequest,
    Region: Region,
    InstanceScalingDownResponse: InstanceScalingDownResponse,
    CreateConsumerRequest: CreateConsumerRequest,
    InquireCkafkaPriceResponse: InquireCkafkaPriceResponse,
    CreateDatahubTopicResponse: CreateDatahubTopicResponse,
    CreatePostPaidInstanceResponse: CreatePostPaidInstanceResponse,
    RouteDTO: RouteDTO,
    InquiryDiskParam: InquiryDiskParam,
    TopicInSyncReplicaResult: TopicInSyncReplicaResult,
    ScalingDownResp: ScalingDownResp,
    SendMessageResponse: SendMessageResponse,
    InquiryBasePrice: InquiryBasePrice,
    DescribeCkafkaZoneResponse: DescribeCkafkaZoneResponse,
    BatchModifyGroupOffsetsRequest: BatchModifyGroupOffsetsRequest,
    ListCvmAndIpInfoRsp: ListCvmAndIpInfoRsp,
    CreateRouteResponse: CreateRouteResponse,
    InstanceResponse: InstanceResponse,
    DatahubTopicDTO: DatahubTopicDTO,
    DescribeGroupInfoRequest: DescribeGroupInfoRequest,
    DescribeGroup: DescribeGroup,
    TopicPartitionDO: TopicPartitionDO,
    CreateTopicResp: CreateTopicResp,
    TaskStatusResponse: TaskStatusResponse,
    BatchModifyTopicInfo: BatchModifyTopicInfo,
    DescribeRouteResponse: DescribeRouteResponse,
    ModifyDatahubTopicResponse: ModifyDatahubTopicResponse,
    DescribeDatahubTopicsRequest: DescribeDatahubTopicsRequest,
    DescribeTypeInstancesRequest: DescribeTypeInstancesRequest,
    InquiryPrice: InquiryPrice,
    ModifyRoutineMaintenanceTaskResponse: ModifyRoutineMaintenanceTaskResponse,
    DescribeTopicDetailRequest: DescribeTopicDetailRequest,
    DescribeGroupOffsetsResponse: DescribeGroupOffsetsResponse,
    SendMessageRequest: SendMessageRequest,
    ConsumerRecord: ConsumerRecord,
    ModifyGroupOffsetsRequest: ModifyGroupOffsetsRequest,
    BatchModifyTopicAttributesRequest: BatchModifyTopicAttributesRequest,
    DeleteGroupResponse: DeleteGroupResponse,
    CreateTopicIpWhiteListRequest: CreateTopicIpWhiteListRequest,
    Route: Route,
    FetchMessageListByTimestampResponse: FetchMessageListByTimestampResponse,
    DeleteInstancePostResponse: DeleteInstancePostResponse,
    Acl: Acl,
    TopicRetentionTimeConfigRsp: TopicRetentionTimeConfigRsp,
    ModifyDatahubTopicRequest: ModifyDatahubTopicRequest,
    ModifyTopicAttributesRequest: ModifyTopicAttributesRequest,
    CreateInstancePreRequest: CreateInstancePreRequest,
    DeleteTopicIpWhiteListRequest: DeleteTopicIpWhiteListRequest,
    DeleteTopicResponse: DeleteTopicResponse,
    DescribeDatahubTopicResp: DescribeDatahubTopicResp,
    DescribeTaskStatusRequest: DescribeTaskStatusRequest,
    DescribeUserRequest: DescribeUserRequest,
    DescribeDatahubTopicsResp: DescribeDatahubTopicsResp,
    DescribeTopicSyncReplicaRequest: DescribeTopicSyncReplicaRequest,
    InstanceDetail: InstanceDetail,
    InstanceQuotaConfigResp: InstanceQuotaConfigResp,
    DescribeTopicDetailResponse: DescribeTopicDetailResponse,
    SubscribedInfo: SubscribedInfo,
    AclRuleResp: AclRuleResp,
    SecurityGroupRouteResp: SecurityGroupRouteResp,
    Price: Price,
    DescribeCkafkaVersionRequest: DescribeCkafkaVersionRequest,

}
